下面是我自己写的一个鼠标钩子,很简单的,可不知道为什么就是不执行:其中:showmessage('11111111122222222333333333333333');这句是我加的为了调试用,可结果还是什么也不输出,不知道是为什么,请高手执教!谢谢!
function MouseProc(iCode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall;export;
var i:integer;
Begin
Result:=0; showmessage('11111111122222222333333333333333');
LogoID:='abcdefghijklmnopqrstuvwxyz1234567890';
for i:=1 to 19 do Str[i]:='abcdefghijklmnopqrstuvwxyz1234567890';
Wpa:=wParam;
Lpa:=lParam;
LogoMouse;
if iCode<0 then Result:=CallNextHookEx(MouseHook,iCode,wParam,lParam);
End;
procedure TForm1.BitBtn1Click(Sender: TObject);
beginif 1>0 then MouseHook:=SetWindowsHookEx(WH_MOUSE,MouseProc,Hinstance,0);
end;

解决方案 »

  1.   

    只有键盘HOOK才能放在程序本身,鼠标和全局HOOK都必须在DLL中
      

  2.   

    不会吧  偶看到一个C++BUILDER就在程序本身就能 钩了 可惜偶不知道他怎么做的!
      

  3.   

    我晕倒,对本程序吗?procedure MouseMessage(var message:Tmsg);message WM_MOUSEMOVE; //截获鼠标移动消息
     .................千万不要告诉我你是要用hook钩自己.
      

  4.   

    Result:=0; showmessage('11111111122222222333333333333333');
    LogoID:='abcdefghijklmnopqrstuvwxyz1234567890';
    for i:=1 to 19 do Str[i]:='abcdefghijklmnopqrstuvwxyz1234567890';
    Wpa:=wParam;
    Lpa:=lParam;
    LogoMouse;
    if iCode<0 then Result:=CallNextHookEx(MouseHook,iCode,wParam,lParam);
    End;你这个代码有问题,哪有这样写的.
    改改Result:=0; 
    if iCode<0 then 
        Result:=CallNextHookEx(MouseHook,iCode,wParam,lParam);if iCode>0 then //这里要自己改成需要处理的消息类型
    begin    
      showmessage('11111111122222222333333333333333');
      LogoID:='abcdefghijklmnopqrstuvwxyz1234567890';
      for i:=1 to 19 do Str[i]:='abcdefghijklmnopqrstuvwxyz1234567890';
      Wpa:=wParam;
      Lpa:=lParam;
    end;
    LogoMouse;
      

  5.   

    上面的logmouse也要写在begin...end;中间,不好意思,打错