您的位置:程序门 -> delphi -> windows sdk/api



关于抓取指定窗口的图像


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于抓取指定窗口的图像
发表于:2008-01-08 12:21:21 楼主
目的:抓取指定窗口的图像,即使该窗口被其他窗口遮盖。
代码:
function   shotscreen   :   tbitmap;
var
    canvas   :   tcanvas;
    rect   :   trect;
    hwin   :   thandle;
begin
    result   :=   nil;
    hwin   :=   getdistwindow;//找到目的窗体的handle
    if   hwin   =   0   then   exit;
    getwindowrect(hwin,rect);
    with   rect   do
    begin
        right   :=   right   -   left;
        bottom   :=   bottom   -   top;
        left   :=   0;
        top   :=   0;
    end;
    result   :=   bitmap;//全局定义
    result.width   :=   rect.right;
    result.height   :=   rect.bottom;
    canvas   :=   tcanvas.create;
    canvas.handle   :=   getdc(hwin);
    result.canvas.copyrect(rect,canvas,rect);
    releasedc(hwin,canvas.handle);
    canvas.free;
end;

问题:实际抓取的,是所有的窗口的图像。如果某个窗口遮盖了指定窗口,那么覆盖的窗口也被抓取。
另外,因为桌面上还需要其他程序显示,所以让指定窗口置顶的方法也是不行的。

请指点!
发表于:2008-01-08 13:07:181楼 得分:0
关注此问题,帮你顶一下!
发表于:2008-01-08 15:30:052楼 得分:0
被覆盖了的窗口是没办法截到图的吧,   你截取的都是桌面dc里面的图片,   qq截图里面也一样的嘛,   不能截已覆盖的..只能把要截的窗口放最上面来.
发表于:2008-01-08 15:41:033楼 得分:0
我试了一下,   当你要截取的窗口被覆盖的时候,   它的dc里面显示的是覆盖在它上面的图像数据,   只有当它到最上面后,   系统调用它的ondraw,   才使它的dc里面显示自己窗体的图像数据..   所以不把它放到最上面来是截不到它真正的窗口图像数据的..
发表于:2008-01-08 16:43:564楼 得分:0
谢谢各位的捧场
如果是只可以取到最顶层的图像,那么getdc的参数,取0或别的窗口的handle,有什么区别呢?
发表于:2008-01-08 16:49:155楼 得分:0
用callwindowproc,  
lresult   callwindowproc(
    wndproc   lpprevwndfunc,     //   pointer   to   previous   procedure
    hwnd   hwnd,                             //   handle   to   window
    uint   msg,                               //   message
    wparam   wparam,                     //   first   message   parameter
    lparam   lparam                       //   second   message   parameter
);
  msg为wm_paint
  wparam   为你要画的   hdc
发表于:2008-01-08 16:51:296楼 得分:0
getdc的参数,   0是取得桌面窗口dc,   handle的话是取得指定窗体客户区的dc,   也就是菜单下面的部分
发表于:2008-01-08 16:58:347楼 得分:0
也就是说,   你getdc(handle)的话,只能截取指定窗口的窗户区图像,不包括窗口标题栏等,如果你要获得整个窗体的话,就必须getdc(0),然后截取的时候指定开始位置座标到窗体的左上像素点.
发表于:2008-01-08 17:28:058楼 得分:0
tabby:getwindowdc就可以了吧
发表于:2008-01-08 17:40:549楼 得分:0
呵呵,没错,只是就getdc而言嘛..你在问0跟handle的区别...


快速检索

最新资讯
热门点击