delphi 截取被遮挡的Window画面


本文整理自网络,侵删。

  

只要不是最小化的窗口,无论它被遮挡一部分还是全部,无论它的位置是否超出屏幕边界,都可以抓到

下面是代码:


function PrintWindow(Wnd: HWND; hDCBlt: HDC; nFlags: DWord): Bool; stdcall external 'user32.dll';

var
Cap : string;

procedure TForm1.Timer1Timer(Sender: TObject);
var
hBMP : HBITMAP;
DC, DC1 : HDC;
H : hWnd;
R : TRect;
begin
H := FindWindow(nil, PAnsiChar(Cap));
if H > 0 then begin
    DC := GetWindowDC(H);
    GetWindowRect(H, R);
    hBMP := CreateCompatibleBitmap(DC, R.Right-R.Left, R.Bottom-R.Top);
    DC1 := CreateCompatibleDC(DC);
    SelectObject(DC1, hBMP);
    PrintWindow(H, DC1, 0);
    //image1.Canvas.Handle:=dc1;
    //image1.Refresh;
    Self.Image1.Height := Round((R.Bottom-R.Top) * (Self.Image1.Width / (R.Right-R.Left)));
    Self.Image1.Picture.Bitmap.Handle:= hBMP;
    Self.Image1.Refresh;
    DeleteDC(DC1);
    DeleteDC(DC);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Self.Image1.AutoSize := True;
Self.Left := Screen.Width-Self.Width;
Self.Top := Screen.Height-Self.Height-50;
Self.FormStyle := fsStayOnTop;
Self.Image1.Left := 2;
Self.Image1.Top := 2;
Self.Image1.Width := Self.Width - 100;
Self.Image1.Stretch := True;
Self.Timer1.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Cap := Self.Edit1.Text;
Self.Timer1.Interval := 50;
Self.Timer1.Enabled := True;
end;


相关阅读 >>

Delphi禁止用鼠标拖动窗口的大小

Delphi 使用twebbrowser组件保存网页为html和mht文件

Delphi 如何判断clipboard剪切板中的内容的类型

Delphi idftp 错误:socket error 10054 �c connection reset by peer -连接被重置

Delphi 用 gdi+ 给图片添加花边的例子

Delphi 内存管理[4]

Delphi 如何禁止用户更改窗体的大小

Delphi源码一个对字符加密解密的实例

Delphi 写图片格式转换程序大全

Delphi firemonkey移动应用程序将设置保存到ini文件的示例

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...