我在网上看到你说WH_KEYBOARD_LL 钩子不用DLL来完成,但是如果做成DLL  是不是这样啊   
一、新建一个ActiveX Dll工程,名字栏里取名为SysHook  二、添加一个模块,取名为mHook,添加代码如下:
  Option Explicit 
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long 
Private 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 
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer 
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) 
Private Type PKBDLLHOOKSTRUCT     VKCode As Long     scanCode As Long     flags As Long     time As Long     dwExtraInfo As Long 
End Type 
Private Const WH_KEYBOARD_LL = 13 
Private Const HC_ACTION = 0 
Private Const WM_KEYDOWN = &H100 
Private Const VK_CONTROL = &H11 
Private Const VK_SHIFT = &H10 
Private Const VK_MULTIPLY = &H6A 
Private Const VK_ADD = &H6B 
Private Const VK_SEPARATOR = &H6C 
Private Const VK_SUBTRACT = &H6D 
Private Const VK_DECIMAL = &H6E 
Private Const VK_DIVIDE = &H6F 
Private Const VK_PRIOR = &H21 
Private Const VK_NEXT = &H22 
Private Const VK_END = &H23 
Private Const VK_HOME = &H24 
Private Const VK_LEFT = &H25 
Private Const VK_UP = &H26 
Private Const VK_DOWN = &H28 
Private Const VK_RIGHT = &H27 
Private Const VK_INSERT = &H2D 
Private Const VK_DELETE = &H2E 
Private Const VK_F1 = &H70 
Private Const VK_F12 = &H7B 
Private Const VK_NUMLOCK = &H90 
Private Const VK_NUMPAD0 = &H60 
Private Const VK_NUMPAD9 = &H69 
Private Const VK_RETURN = &HD 
Private Const VK_SPACE = &H20 
Private Const VK_TAB = &H9 
Private Const VK_ESCAPE = &H1B 
Private Const VK_BACK = &H8 
Private PrevHook As Long 
Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long     
Dim p As PKBDLLHOOKSTRUCT    
 Dim strKey As String         
 If ncode = HC_ACTION Then        
 Select Case wParam            
 Case WM_KEYDOWN               
  CopyMemory p, ByVal lParam, Len(p)
    '过程就不写了 
  Case Else                
 End Select     End If          
  CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam End Function 
把工程自动建立的Class1类模块改名为cSystemHook,添加代码如下: 
Public Sub Hook()     
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0) 
End Sub 
Public Sub ReleaseHook()    
 Open "f:\stud.txt" For Output As #1  Write #1,strKey
 Close #1     
 Call UnhookWindowsHookEx(PrevHook)
 End Sub 
编译生成DLL,做一个普通的工程,添加引用SysHook' 
Option Explicit 
 Dim  SS As cSystemHook 
 Private Sub Form_Load()   
  Set SS= New cSystemHook   
   SS.HOOK End Sub 
Private Sub Form_Unload(Cancel As Integer)   
  SS.ReleaseHook 
End Sub 
  但是没有什么预想中的效果

解决方案 »

  1.   

    我知道不用,不过如果要做的话  是不是这样做的啊
      不过好象没有什么预计效果,我对制作DLL不大知道
      能帮忙改下么
      

  2.   

    ActiveX Dll不行。把代码稍微改改,用DELPHI编译,VB调用就可以了。
      

  3.   

    可是我不会DELPHI   我只想用VB做的   是我的代码出错了  还是什么~~
      

  4.   

    你找个别人编译好的link。把VB 的DLL编译成输出函数,然后给工程来调用,这样才行!
      

  5.   

    VB不能做标准的dll 编译出来的是activexdll 没有导出函数的  所以不能将钩子挂到vb写的dll上
      

  6.   

    使用ActiveX DLL可以成功地使用HOOK这是我自己测试过的结论我手头的一份代码里完成了键盘与鼠标以及系统事件HOOK,其它的不太清楚,还没有仔细研究