[抓图/截图问题] 注意:要抓的窗口不在最前 200分!!!(200分)

  • 主题发起人 主题发起人 liuge
  • 开始时间 开始时间
L

liuge

Unregistered / Unconfirmed
GUEST, unregistred user!
用Bitblt函数抓图,如果要抓的窗口不在最上层(即被其他窗口覆盖),则不能抓到该窗口的图像,而是覆盖在其上的其他窗口的图像。

如何才能抓到不在最上层的窗口呢?
 
你如果能够知道那个窗口的句柄也许好些。
 
我能获得句柄
 
你提的问题论坛以前好象有提过而且已经解决,你搜搜看
 
to hupeh:
被抓图的窗口不在最顶层的我没找到。
 
to hupeh:
被抓图的窗口在最顶层的我没找到。
 
获得要抓图的窗口句柄

使用这个函数把窗口弄到前台
BOOL SetForegroundWindow(

HWND hWnd // handle of window to bring to foreground
);
 
我不想改变我要抓的窗口的运行状态,也就是说,当该窗口被其他窗口覆盖时,我也希望能对该窗口进行复制
 
显示窗口应该是绘制图象的一个过程,既然你能得到句柄,那就根据窗口绘制信息和绘制过程绘制出来一个图再保存就ok了,我不知道这样做是否行的通,我的一点见解。
 
得到窗口的DC就可以了,我以前抓过,但是抓的是自己程序的窗口,当然是覆盖后的,不过我想原理是一样的
 
to cactus123456, 继续
 
getdc(hwnd);
桌面 hwnd:=0;
程序 hwnd:= [red]hwnd[/red] //程序的句柄
 
类似这样的代码:
dc := GetWindowDC( 窗口A的handle );
BitBlt(self.Canvas.Handle , 0,0,screen.Width,screen.Height,
dc, 0,0,SRCCOPY);
如果窗口A不在顶层,是取不到窗口A的图像的
 
弄到前台再恢复原样
有个很好的软件就是这样处理的,HyperSnap-DX
 
To CookieTian,
我不想改变我要抓的窗口的运行状态,也就是说,当该窗口被其他窗口覆盖时,我也希望能对该窗口进行复制
 
别费事了
BitBlt API函数的功能是将屏幕上任何一块拷贝到屏幕上其它任何一个地方。
没有在屏幕上显示的画面是抓不出来的
 
to weichao9999,
我就是要问有什么别的办法可以做到
 
被抓的程序是你做的吗,如果是这样的话还有办法,不是的话可就困难了,我是做不出来
 
to weichao9999,
被抓的程序不是我做的.
如果窗口是自己写的,不在被抓窗口的代码里面做文章,请谈谈如何抓
 
这个问题我以前也问过,不过没有解决,,帮你顶。。。关注。。。
 
后退
顶部