如何截取被其他窗体遮住的图形?(100分)

  • 主题发起人 主题发起人 leiqs
  • 开始时间 开始时间
获得窗口句柄,再看看delphi是怎么实现GetFormImage的
 
procedure tform1.GetWindowImg(window_name:string);
var
hd:HWND;
h:hdc;
t:trect;
begin
hd:=findwindow(nil,pchar(window_name));
getwindowrect(hd,t);
h:=getwindowdc(hd);
bitblt(canvas.handle,0,0,t.Right,t.Bottom,h,0,0,SRCCOPY);
end;
 
好象返回的是顶层窗体的图象。window_name我用被挡窗体的caption
 
不知道是否有好的方法
你试一试先暂时把它调整到Topmost然后再恢复
 
同意zjan521,你先用setwindowpos将窗口设为顶层,取到图像再恢复
 
那样屏幕不断闪烁,不行
 
找到他的主窗口的句柄就可以了,然后用循环 GetWindow调用,传入不同参数, 查找子窗口,最后再GetDc
 
to 张无忌:
比如顶级窗口为delph,要截取大富翁网页的图形,下面的程序该如何改?
procedure tform1.GetWindowImg
var
hd:HWND;
h:hdc;
t:trect;
begin
{找到他的主窗口的句柄就可以了,
然后用循环 GetWindow调用,传入不同参数,
查找子窗口,最后再GetDc
}
hd:=findwindow(nil,pchar('大富翁...'));
getwindowrect(hd,t);
h:=getdc(hd);
bitblt(canvas.handle,0,0,t.Right,t.Bottom,h,0,0,SRCCOPY);
end;
 
不行的,Windows系统中为了节省资源,没有显示在屏幕上的内容是不会绘制的,所以即使你找到窗口的DC,取出来的内容也是空的或者是顶层窗口的内容,除非该窗口是顶层窗口.

没有什么好办法.
 
如果不是连续的截取的话,闪烁也没关系的,可以接受
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部