取的控件HANDLE后,就可以了
但是开始时,我用FORM将当前桌面复制并覆盖,这样就取不到控件的HANDLE了
有没有办法解决?

解决方案 »

  1.   

    我用FORM将当前桌面复制并覆盖??什么意思讲详细一点
      

  2.   

    就是先将当前的桌面抓图,然后放在一个FORM上,把FORM最大化显示,这样就只能取到FORM的句柄了,所以怎么解决?
      

  3.   

    你为什么要把桌面复制到form上,为什么要把他最大化.
    你就是想把鼠标放到某个控件上然后一点,就可以把抓下来是吗?
      

  4.   

    那你为什么不把form给隐藏.
    一般的做法,点击抓拍按钮,然后隐藏窗体.通过
    getcursorpos得到鼠标的坐标 通过
    windowfrompoint  得到当前坐标的控件句柄.
    不就行了
      

  5.   

    写Hook程序.
    当你启动了抓品程序的时候所有的单击,双击事件全部截获
    你可以参见我回答的这个贴子,可以截获所有的应用程序的消息.
    http://www.csdn.net/expert/topic/1068/1068010.xml?temp=.7460443
      

  6.   

    //看你懒的可以,帮你写完了你自己建一个Dll,吧下面程序考进去
    //编译,建一个应用程序 用 EnableHotKeyHook, 启动截获
    //    DisableHotKeyHook; 停止截获
    library getkey;
    uses
      Windows,
      Messages,
      classes,
      stdctrls,
      Sysutils;
    var
        hNextHookProc: HHook;
        procSaveExit: Pointer;
        hwnd,hwnd2:longint;
        info:String;
    function MouseHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
    var
      obj:Tobject;
      hwnd:longint;
      mp:Tpoint;
    begin
         result:=0;
         if icode<0 then
         begin
           result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
           exit;
         end;
         if wparam = WM_LBUTTONUP then begin
          //这里写你的抓拍程序
         end;
        end;
    end;function EnableHotKeyHook: BOOL; export;
    begin
        Result := False;
        if hNextHookProc <> 0 then Exit;
        hNextHookProc := SetWindowsHookEx(WH_mouse, mouseHookHandler,HInstance, 0);
        Result := hNextHookProc <> 0;
    end;function DisableHotKeyHook: BOOL; export;
    begin
        if hNextHookProc <> 0 then
        begin
            UnhookWindowshookEx(hNextHookProc); // 解除 mouse Hook
            hNextHookProc := 0;
        end;
        Result := hNextHookProc = 0;
    end;exports
        EnableHotKeyHook,
        DisableHotKeyHook;begin
        hNextHookProc := 0;
        procSaveExit := ExitProc;
    end.
      

  7.   

    搞不定!
    我不想做成DLL文件,于是就直接用了!
    这句同不过:
    hNextHookProc := SetWindowsHookEx(WH_mouse, mouseHookHandler,HInstance, 0);Incompatible types:'Calling conventions differ'
      

  8.   

    不能不用Dll,要写全局钩子,一定要用Dll.呵呵慢慢写吧
    新建一个Dll全部考进去,编译,我这里可以编译
    library Project1;
    uses
      Windows,
      Messages,
      classes,
      stdctrls,
      Sysutils;
    var
        hNextHookProc: HHook;
        procSaveExit: Pointer;
        hwnd,hwnd2:longint;
        info:String;
    function MouseHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
    var
      obj:Tobject;
      hwnd:longint;
      mp:Tpoint;
    begin
         result:=0;
         if icode<0 then
         begin
           result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
           exit;
         end;
         if wparam = WM_LBUTTONUP then begin
          //这里写你的抓拍程序
         end;
    end;function EnableHotKeyHook: BOOL; export;
    begin
        Result := False;
        if hNextHookProc <> 0 then Exit;
        hNextHookProc := SetWindowsHookEx(WH_mouse, mouseHookHandler,HInstance, 0);
        Result := hNextHookProc <> 0;
    end;function DisableHotKeyHook: BOOL; export;
    begin
        if hNextHookProc <> 0 then
        begin
            UnhookWindowshookEx(hNextHookProc); // 解除 mouse Hook
            hNextHookProc := 0;
        end;
        Result := hNextHookProc = 0;
    end;
    end.
      

  9.   

    没用,把鼠标移到控件中还会有HINI发生
    单击右键还是有事件发生