关于DLL调用(0分)

  • 主题发起人 主题发起人 lyang_1
  • 开始时间 开始时间
L

lyang_1

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了个DLL,用来监控键盘ctrl+B事件。但在调用它里面的函数时遇到不少问题:函数没有响应,或可能是函数返回的值不正确。以下是部分关键代码,请您帮我查错。谢谢。<br>这是生成DLL前的pas里的代码:<br>……<br>function keyboardhookhandler(icode:integer;wparam:wparam;lparam:lparam):<br>lresult;stdcall;export;<br>function enablehotkeyhook:bool;stdcall;export;<br>function disablehotkeyhook:bool;stdcall;export;<br>procedure hotkeyhookexit;far;<br>implementation<br>function keyboardhookhandler(icode:integer;wparam:wparam;lparam:lparam):<br>lresult;stdcall;export;<br>const<br>_keypressmask=$80000000;<br>begin<br>result:=0;<br>if icode&lt;0 then<br>begin<br>result:=callnexthookex(hnexthookproc,icode,wparam,lparam);<br>exit;<br>end;<br>if ((lparam and _keypressmask)=0) and &nbsp;(getkeystate(vk_control)&lt;0) and (wparam=ord('b')) then<br>begin<br>result:=1;<br>winexec('notepad.exe',sw_normal);<br>end ;<br>&nbsp;end;<br>function enablehotkeyhook:bool;stdcall;export;<br>var<br>dll:thandle;<br>p:pointer;<br>begin<br>result:=false;<br>if hnexthookproc&lt;&gt;0 then exit;<br>dll:=LoadLibrary('C:/My Documents/delphi/delphi.files/hktest.dll');<br>p:=GetProcAddress(dll,'keyboardhookhandler');<br>hnexthookproc:=setwindowshookex(wh_keyboard,p,<br>dll,0);<br>result:=hnexthookproc&lt;&gt;0;<br>end;<br>function disablehotkeyhook:bool;stdcall;export;<br>begin<br>if hnexthookproc&lt;&gt;0 then<br>begin<br>unhookwindowshookex(hnexthookproc);<br>hnexthookproc:=0;<br>messagebeep(0);<br>end;<br>result:=hnexthookproc=0;<br>end;<br>procedure hotkeyhookexit;<br>begin<br>if hnexthookproc&lt;&gt;0 then disablehotkeyhook;<br>exitproc:=procsaveexit;<br>end;<br>end.<br>然后在另外一个新建的PROJECT的BUTTONCLICK事件里调用enablehotkeyhook和<br>disablehotkeyhook,但没有响应,<br>BUTTONCLICK事件只有一条语句:IF enablehotkeyhook THEN SHOWMESSAGE(‘S’),但运行时SHOWMESSAGE没有执行。
 
单步执行的时候可以跟踪到函数里面吗?
 
enablehotkeyhook内<br>dll、p、hnexthookproc使用前都要检查是否正确,比如<br>if dll=0 then RaiseLastWin32Error();<br>......<br>if p=0 then RaiseLastWin32Error();<br>....<br>
 
另外enablehotkeyhook是在hktest.dll里面的吗,那干嘛还 LoadLibary 自己呢,<br>如果自己还没有load,就不可能执行到enablehotkeyhook这个函数,如果<br>这个dll已经load了,你又load...
 
接受答案了.
 
后退
顶部