目的:抓取指定窗口的图像,即使该窗口被其他窗口遮盖。
代码:
function ShotScreen : TBitmap;
var
Canvas : TCanvas;
rect : TRect;
HWin : THandle;
begin
Result := Nil;
HWin := GetDistWindow;//找到目的窗体的handle
if HWin = 0 then Exit;
GetWindowRect(HWin,Rect);
with Rect do
begin
Right := Right - Left;
Bottom := Bottom - Top;
Left := 0;
Top := 0;
end;
Result := Bitmap;//全局定义
Result.Width := Rect.Right;
Result.Height := Rect.Bottom;
Canvas := TCanvas.Create;
Canvas.Handle := GetDc(HWin);
Result.Canvas.CopyRect(Rect,Canvas,Rect);
ReleaseDc(HWin,Canvas.Handle);
Canvas.Free;
end;问题:实际抓取的,是所有的窗口的图像。如果某个窗口遮盖了指定窗口,那么覆盖的窗口也被抓取。
另外,因为桌面上还需要其他程序显示,所以让指定窗口置顶的方法也是不行的。请指点!
代码:
function ShotScreen : TBitmap;
var
Canvas : TCanvas;
rect : TRect;
HWin : THandle;
begin
Result := Nil;
HWin := GetDistWindow;//找到目的窗体的handle
if HWin = 0 then Exit;
GetWindowRect(HWin,Rect);
with Rect do
begin
Right := Right - Left;
Bottom := Bottom - Top;
Left := 0;
Top := 0;
end;
Result := Bitmap;//全局定义
Result.Width := Rect.Right;
Result.Height := Rect.Bottom;
Canvas := TCanvas.Create;
Canvas.Handle := GetDc(HWin);
Result.Canvas.CopyRect(Rect,Canvas,Rect);
ReleaseDc(HWin,Canvas.Handle);
Canvas.Free;
end;问题:实际抓取的,是所有的窗口的图像。如果某个窗口遮盖了指定窗口,那么覆盖的窗口也被抓取。
另外,因为桌面上还需要其他程序显示,所以让指定窗口置顶的方法也是不行的。请指点!
如果是只可以取到最顶层的图像,那么GETDC的参数,取0或别的窗口的handle,有什么区别呢?
LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc, // pointer to previous procedure
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
Msg为WM_PAINT
wParam 为你要画的 HDC