📄 1753.html
字号:
<html> <head> <title>Re: App.Instance 传回 0</title> </head> <BODY BACKGROUND="" BGCOLOR="white" TEXT="black" LINK="red" VLINK="#808080" ALINK=""> <center> <h1>Re: App.Instance 传回 0</h1> </center><HR><p>Posted by <a href="mailto:cww5@mail.ncku.edu.tw">cww</a> on January 19, 1998 at 22:59:07:<p>In Reply to: <a href="1746.html"><b>App.Instance 传回 0</b></a> posted by 小吴 on January 19, 1998 at 17:31:54:<p>: 解决方式就是主程式要传这个参数进去。你再试看看。<p>我依您的建议修改了一下EnableKBDHook,改传参数进入, <br>而在另一个启动KBD hook程式的专案中用以下方式呼叫<p> EnableKBDHook(App.HInstance) <p> 而后将专案制成.exe档<br>结果,在这.exe档中按keyboard, 一切ok, 但切至其他window中<br>按keyboard, 则该程式出现无法预期的错误,而结束掉,但启动hook的.exe之 process 仍活得很好,直到我unhook keyboard后,其他的程式按keyboard时,才不会有错<br>以下是新版程式<br>><br>Private Declare Function SetWindowsHookEx Lib "user32" Alias _ "SetWindowsHookExA" (ByVal idHook As Long,<br>ByVal lpfn As Long, ByVal _ hmod As Any, ByVal dwThreadId As Long) As Long<br>Private Declare Function UnhookWindowsHookEx Lib "user32" _ <br>(ByVal hHook As Long) As Long<br>Const WH_KEYBOARD = 2<p>Public Sub UnHookKBD()<br>If hnexthookproc 0 Then<br> UnhookWindowsHookEx hnexthookproc<br> hnexthookproc = 0<br>End If<br>End Sub<p>Public Function EnableKBDHook(Byval hAppHandle as long)<br>'___________________________________^^^^^^^^^^<br>'___________________________________改成由外部传入 <br>'只是纳闷,该值是指向行程中被对映进来的.dll之位址,我觉得<br>'我传App.HInstance,似乎不太对,但如何做实在不知<br>If hnexthookproc =0 Then<br> Exit Function<br>End If<br>hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _ KeyboardHookHandler, hAppHandle, 0)<p>If hnexthookproc = 0 Then<br> EnableKBDHook = hnexthookproc<br>End If<br>End Function<p><br>以下是 hook.bas 为keyboard hook procedure, 与KBhook.cls同一专专案<p>Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As<br>Long, lParam As Any) As Long<br>Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer<br>Const VK_CONTROL = &H11<br>Const KeyPressMask = &H80000000<br>Public hnexthookproc As Long<p>Public Function KeyboardHookHandler(ByVal iCode As Long, _<br>ByVal wParam As Long, ByVal lParam As Long) As Long<p>KeyboardHookHandler = 0<br>If iCode < 0 Then<br> KeyboardHookHandler = CallNextHookEx(hnexthookproc, iCode, _ wParam, lParam)<br>Exit Function<br>End If<br>'侦测 Ctrl + B 组合键<br>If (lParam And KeyPressMask) = 0 Then<br> If (GetKeyState(VK_CONTROL) < 0) And (Chr(wParam) = "B") Then<br> KeyboardHookHandler = 1<br> Shell "c:\tools\spe3\pe2.exe", vbMaximizedFocus<br> End If<br>End If<br>End Function<br><br><p><a name="followups">Follow Ups:</a><br><ul><!--insert: 1753--></ul><!--end: 1753--><br><HR><p></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -