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;
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;