[ reiser @ 01.10.2006. 11:51 ] @
Kako snimiti screenshot desktopa u bmp formatu, ali preko cistog apija ? Ovaj kod bi trebao da preslika desktop u neku promenljivu (valjda), ali kako to onda snimiti u fajl ? Code: procedure TakeScreenshot(const AFileName : String); var DC, DCC : HDC; dskwnd : HWND; BMPInfo : TBitmapInfo; DIBBV : pointer; DIBHandle : HBITMAP; rwidth, rheight : DWORD; prevobj : HGDIOBJ; begin dskwnd := GetDesktopWindow; rwidth := GetSystemMetrics(SM_CXSCREEN); rheight := GetSystemMetrics(SM_CYSCREEN); DC := GetDCEx(dskwnd, 0, DCX_CACHE or DCX_WINDOW); DCC := CreateCompatibleDC(0); ZeroMemory(@BMPInfo, SizeOf(TBitmapInfo)); BMPInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER); BMPInfo.bmiHeader.biBitCount := 24; BMPInfo.bmiHeader.biWidth := rwidth; BMPInfo.bmiHeader.biHeight := -rheight; BMPInfo.bmiHeader.biCompression := BI_RGB; BMPInfo.bmiHeader.biPlanes := 1; DIBHandle := CreateDIBSection(DC, BMPInfo, DIB_RGB_COLORS, DIBBV, 0, 0); GDIFlush; prevobj := SelectObject(DCC, DIBHandle); BitBlt(DCC, 0, 0, rwidth, rheight, DC, 0, 0, SRCCOPY); // ?????? SelectObject(DCC, prevobj); DeleteObject(DIBHandle); DeleteDC(DCC); ReleaseDC(dskwnd, DC); end; |