屏幕捉图的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 constantine
  • 开始时间 开始时间
C

constantine

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么才能捕捉到金山词霸,或者是迅雷等下载软件的那个浮动窗体的图像
从GetDC(0)获得的图像没有哦
各位指点一下
 
请问怎么才能捕捉到金山词霸,或者是迅雷等下载软件的那个浮动窗体的图像
从GetDC(0)获得的图像没有哦
各位指点一下
 
手工不行吗?
GetWindowDC()
 
我也在写 这截图的程序 要的是qq的效果
 
只要有窗口句柄怎么会不能截呢?我软件中的一个函数
procedure GetWindowBitmap(aWnd : HWND; aBmp : TBitmap);
var
C:TCanvas; H:HDC; R:TRect;
begin
// aWnd:= GetForegroundWindow();
if aWnd=0 then exit;
C:=TCanvas.Create;
H := GetWindowDC(aWnd);//取得这个窗口的DC
try
GetWindowRect(aWnd,R);//取得这个窗口的大小,将其赋给位图对象
aBmp.Width:=R.Right-R.Left;
aBmp.Height:=R.Bottom-R.Top;
C.Handle:=H;
aBmp.Canvas.CopyRect(Rect(0,0, aBmp.Width, aBmp.Height), C, Rect(0,0, aBmp.Width, aBmp.Height));
finally
C.Free;
ReleaseDC(aWnd, H);
end;
end;
 
谢谢楼上的,我是说截取全屏的时候
桌面的句柄我是用GetDesktopWindow得到的,不行
 
研究了一下,的确如楼主所说,
我发现具有透明扩展风格的窗口(WS_EX_LAYERED)截图时都将被忽略。
原因弄明白了,但问题却不好解决,我提一个不是办法的办法:
枚举窗口,判断IsWindowVisible() and (Exsty and
WS_EX_LAYERED = WS_EX_LAYERED)
如果是的话,用我上面的函数取其图,再按坐标加到已经得到的全屏截图上。。。
或者用动态数组记下所有透明窗口,截屏之前将这些窗口的WS_EX_LAYERED属性去掉,
截完之后再枚举动态数组中的窗口设置回来。不过透明度可能会丢失。。。
 
QQ的截图方法也一般,没能解决这个问题。
 
PRINT SCREEN键+剪贴板
 
PRINT SCREEN 这个建到底是做了什么操作呢?
看了一下居然还能保持透明
 
系统自带的当然好用,我想过这样一个办法来解决这个事,就是刚开始就把图全给抓下来,放到窗体上,这样来代替透明窗体,造成假象,然后在这上边去选想要的区域,这是以前做
自由选区的时候想到的一个烂办法,哈哈!献丑了!
 
多人接受答案了。
 
后退
顶部