这是用VB6.0写的程序:
Private Sub Command1_Click()
Shell "notepad.exe", vbNormalFocus
AddHook
End SubPrivate Sub Form_Load()
num = 1
End SubPrivate Sub Form_Unload(Cancel As Integer)
DelHook
End Sub在新建一个模块,插入以下代码
VB code
Public Type KEYMSGS
vKey As Long '虚拟码 (and &HFF)
sKey As Long '扫描码
flag As Long '键按下:128 抬起:0
End Type
Public keyMsg As KEYMSGS
Public Const WH_KEYBOARD_LL = 13
Public lHook As Long
Public num As Long'消息
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
'键盘消息
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(lpvDest As Any, _
ByVal lpvSource As Long, _
ByVal cbCopy As Long)Public Sub AddHook()
lHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
End SubPublic Sub DelHook()
UnhookWindowsHookEx lHook
End Sub
Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If code = HC_ACTION Then
CopyMemory keyMsg, lParam, LenB(keyMsg)
Select Case wParam
Case WM_SYSKEYDOWN, WM_KEYDOWN:
If (keyMsg.vKey And &HFF) = vbKeyA Then '设置自定义按键
SendKeys num
num = num + 1
CallKeyHookProc = 1 '屏蔽按键
End If
Case WM_SYSKEYUP, WM_KEYUP:
End Select
End If
If code <> 0 Then
CallKeyHookProc = CallNextHookEx(0, code, wParam, lParam)
End IfEnd Function用VB6.0写的程序,如何移植到VB2005中去也能同样运行?
Private Sub Command1_Click()
Shell "notepad.exe", vbNormalFocus
AddHook
End SubPrivate Sub Form_Load()
num = 1
End SubPrivate Sub Form_Unload(Cancel As Integer)
DelHook
End Sub在新建一个模块,插入以下代码
VB code
Public Type KEYMSGS
vKey As Long '虚拟码 (and &HFF)
sKey As Long '扫描码
flag As Long '键按下:128 抬起:0
End Type
Public keyMsg As KEYMSGS
Public Const WH_KEYBOARD_LL = 13
Public lHook As Long
Public num As Long'消息
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
'键盘消息
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(lpvDest As Any, _
ByVal lpvSource As Long, _
ByVal cbCopy As Long)Public Sub AddHook()
lHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
End SubPublic Sub DelHook()
UnhookWindowsHookEx lHook
End Sub
Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If code = HC_ACTION Then
CopyMemory keyMsg, lParam, LenB(keyMsg)
Select Case wParam
Case WM_SYSKEYDOWN, WM_KEYDOWN:
If (keyMsg.vKey And &HFF) = vbKeyA Then '设置自定义按键
SendKeys num
num = num + 1
CallKeyHookProc = 1 '屏蔽按键
End If
Case WM_SYSKEYUP, WM_KEYUP:
End Select
End If
If code <> 0 Then
CallKeyHookProc = CallNextHookEx(0, code, wParam, lParam)
End IfEnd Function用VB6.0写的程序,如何移植到VB2005中去也能同样运行?
其他的就是试试看