# 旧事重提：keyboard Hook

Posted by cww on March 09, 1998 at 19:07:54:

吴站长您好：
一两个月前曾提出keyboard hook的问题，当时于
Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
中第三个参数中打转，如果它是system hook的话，第三个参数应是
.dll的hInstance。而当时您似乎是说于.dll程式中不要使用
App.hInstance传入，即

preHook = SetWindowsHookEx(WH_KEYBOARD, address of myHookFunc, _
app.hInstance, 0)

会有问题，不过，一般.dll中会有
dllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
的主程式，第一个参数便是.dll的 hInstance，而我猜在vb的.dll Server
中，app.hInstance指的应是.dll的hInstance，我也试过列出一般程式中，
使用.dll server，而后印出二者的app.hInstance结果发现，一般ap的app.hinstance与.dll中的app.hinstance值不相同，所以加强了我这个看法。
而vb中只有使用ActiveX.Dll Server才能造出.dll，所以我使用
SetWindowsHookEx(WH_KEYBOARD, address of myHookFunc, _
app.hInstance, 0)
的呼叫似乎没有错，而它在local hook不会当，而于system hook时会当的原
因，初步排除应不是App.hInstance的问题，可能是ActiveX.dll Server与
一般.dll特性的不同，只是我不太知道它们之间最大的不同在何处，您觉得
可能往哪个方向去TESTING比较可能找出答案？谢谢

Follow Ups: