知道窗口的进程号,怎样获得它的图象(Canvas)? ( 积分: 100 )

  • 主题发起人 主题发起人 大伟001
  • 开始时间 开始时间

大伟001

Unregistered / Unconfirmed
GUEST, unregistred user!
我知道怎样获取屏幕图象,但是我想获取一个程序的窗口图象,因为它可能被别的窗口覆盖,既怎样利用进程号获得窗口的Canvas。
以下是获取屏幕代码:
var Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Canvas.handle := GetDC(0);//得到屏幕的DC;
//Bitmap.Canvas.handle := GetDC(进程号);//这样不能获取;
form1.Canvas.CopyRect(Rect(0, 0, 1000, 1000),Bitmap.Canvas, Rect(0, 0, 1000, 1000));
end;
 
我知道怎样获取屏幕图象,但是我想获取一个程序的窗口图象,因为它可能被别的窗口覆盖,既怎样利用进程号获得窗口的Canvas。
以下是获取屏幕代码:
var Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Canvas.handle := GetDC(0);//得到屏幕的DC;
//Bitmap.Canvas.handle := GetDC(进程号);//这样不能获取;
form1.Canvas.CopyRect(Rect(0, 0, 1000, 1000),Bitmap.Canvas, Rect(0, 0, 1000, 1000));
end;
 
直接查找窗口句柄不行吗?
 
windowhandle := windowfrompoint(cursorpoint);

windowhandle是句柄吗?用句柄怎样操作呢?
 
windowhandle应该是句柄。
 
不是进程号,应该是句柄,用句柄怎样操作呢?
 
GetDC(Handle);即可
 
GetDC(Handle);即可
搞定啦。
 
不对呀?
获取的图象是被覆盖的。

源码如下:
procedure TForm1.Timer1Timer(Sender: TObject);
var
cursorpoint: TagPOINT;
windowhandle: hwnd;
Bitmap: TBitmap;
begin

Bitmap := TBitmap.Create;
if GetCursorPos(cursorpoint) then
begin
windowhandle := windowfrompoint(cursorpoint);
Bitmap.Canvas.handle := GetDC(windowhandle); //得到Desktop的DC;
form1.Canvas.FillRect(form1.Canvas.ClipRect);
form1.Canvas.CopyRect(Rect(0, 0, 1000, 1000), Bitmap.Canvas, Rect(0, 0, 1000, 1000));
end;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
594
import
I
I
回复
0
查看
794
import
I
后退
顶部