function myHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
  X, Y : Integer;
begin
result:=0;
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
begin
  X := PMouseHookStruct(lParam).pt.X;
  Y := PMouseHookStruct(lParam).pt.Y;
  log('Stop Hook at' + inttostr(X) + ';' + inttostr(Y));
  //UnhookWindowsHookEx(myHook);
  //应该是 CallNextHook吧
  exit;
end;if (wParam = WM_NCMouseMove) or (wParam=WM_MOUSEMOVE) then
begin
  X := PMouseHookStruct(lParam).pt.X;
  Y := PMouseHookStruct(lParam).pt.Y;
  log(inttostr(X) + ';' + inttostr(Y));
end;

解决方案 »

  1.   

    function myHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
    var
      X, Y : Integer;
    begin
    result:=0;
    if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
    begin
      X := PMouseHookStruct(lParam).pt.X;
      Y := PMouseHookStruct(lParam).pt.Y;
      log('Stop Hook at' + inttostr(X) + ';' + inttostr(Y));
      UnhookWindowsHookEx(myHook);
      exit;
    end;if (wParam = WM_NCMouseMove) or (wParam=WM_MOUSEMOVE) then
    begin
      X := PMouseHookStruct(lParam).pt.X;
      Y := PMouseHookStruct(lParam).pt.Y;
      log(inttostr(X) + ';' + inttostr(Y));
    end;result := CallNextHookEx(myHook, iCode, wParam, lParam);
    end;不好意思,我粘少了一段我有 callnext我就是需要再点击了后就立刻停止HOOK,然后记录那一刻的鼠标座标哦
      

  2.   

    那你是要
     if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
        就不再用Hook了?
    如果要继续使用就不要UnHook
      

  3.   

    是啊,都说了 我希望让用户 starthook 之后,移动鼠标到任意一点点击鼠标左键就停止HOOK,然后得到那一点的座标而已啊
      

  4.   

    要记录那以位置的鼠标坐标也用不着UnHookHook应该在你不用钩子时用专写的一个函数释放
      

  5.   

    我现在不是那里的问题,我是当鼠标移动出调用 starthook 的窗体后就失效了。
      

  6.   

    function myHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
    begin
      result:=0;
      if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
      begin
        //发消息通知你的程序用GetCusorPos取得鼠标位置
        //CallNext
      end;
    end;
    我曾经用这种方法作过一个屏幕取色程序
      

  7.   

    没错啊,我也是用 sendmessage 将座标发给调用的窗口啊不过代码没有贴出来确实是实现了,可是一样是一旦移出窗体就立刻失效了
      

  8.   

    sendmessage? 用filemapping试试。
      

  9.   

    为什么?
    SENDMESSAGE明明可以给窗口句柄发送消息,确实是成功了为什么偏偏移出窗体就不可以了呢?