1734.html
来自「VB技巧问答10000例 VB技巧问答10000例」· HTML 代码 · 共 29 行
HTML
29 行
<html> <head> <title>system keyboard hook 再问</title> </head> <BODY BACKGROUND="" BGCOLOR="white" TEXT="black" LINK="red" VLINK="#808080" ALINK=""> <center> <h1>system keyboard hook 再问</h1> </center><HR><p>Posted by <a href="mailto:cww5@mail.ncku.edu.tw">cww</a> on January 18, 1998 at 23:10:12:<p>您好:<br>上回有请教过keyboard hook的问题,后来,我发现task hook有成功,于是<br>想改变成system hook,于是我写了一个activeX .dll Server. 两个method<br>去enable keyboard hook 与disable掉,而keyboard hook function则放在<br>.dll project 中的一个.bas中,而后制成hooks.dll。<br>而我开另一个专案,引用方才的hooks server,发现,在这个专案中,我按<br>keyboard 后,结果是我想要的,但在其他的window (如:桌面)下,则会产<br>生错误,是我想做system hook的方向有误,还是可能什么原因?<br>程式不长,故post上来,有空时,烦请给予指导。谢谢 <p>以下是kbhooks.cls<br>Private Declare Function SetWindowsHookEx Lib "user32" Alias _ "SetWindowsHookExA" (ByVal idHook As Long, 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()<br>If hnexthookproc 0 Then<br> Exit Function<br>End If<br>hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _ KeyboardHookHandler, App.hInstance, 0)<br> '^^^^^^^^^^^^^^<br> '我怀疑这里有问题,但不知如何更改较对<br>If hnexthookproc 0 Then<br> EnableKBDHook = hnexthookproc<br>End If<br>End Function<p><br>以下是 hook.bas 为keyboard hook procedure<p>Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As 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<br> <br> 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: 1734--><!--top: 1746--><li><a href="1746.html"><b>App.Instance 传回 0</b></a> 小吴 <i>17:31:54 1/19/98</i>(<!--responses: 1746-->1)<ul><!--insert: 1746--><!--top: 1753--><li><a href="1753.html"><b>Re: App.Instance 传回 0</b></a> cww <i>22:59:07 1/19/98</i>(<!--responses: 1753-->0)<ul><!--insert: 1753--></ul><!--end: 1753--></ul><!--end: 1746--></ul><!--end: 1734--><br><HR><p></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?