可以的 先新建一个exe,写入以下代码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 在新建一个模块,插入以下代码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然后在窗体中加一个 button 按钮,就完成了运行后,点 按钮就把记事本打开,按 a键,就输入 123...把分给我啦,我已经没分下载东东了
如果是数组的话,就在 Public num As Long 下面定义一个 Public yours(10) As Long 把 Private Sub Form_Load()改为Dim n As Integer num = 0 For n = 0 To 10 yours(n) = n Next再把模块中的 SendKeys num num = num + 1 改为 SendKeys yours(num) If (num < 10) Then num = num + 1
取消11楼的问题!!重新问下: SendKeys yours(num) If (num < 10) Then num = num + 1 ElseIf (num > 10) Then num = 0,我在这里加了这句。我的意思是想当它把数组中最后一个元素的数据输出时,再重新回到第一个元素继续输出,可是运行后,我发现我加的这句不起作用。。应该怎样改?
ElseIf (num >= 10) Then num = 0
把 If (num < 10) Then num = num + 1 改为If (num < 10) Then num = num + 1 else num = 0 EndIf
SORRY!!!很棒。没错,是我弄错了。VERY GOOD!马上结贴,给分!
把这句Case WM_SYSKEYDOWN, WM_KEYDOWN:下面的改为If (keyMsg.vKey And &HFF) = vbKeyA Then '设置自定义按键A kg = kg Xor 1 End If If (keyMsg.vKey And &HFF) = vbKeyB And kg = 1 Then'设置自定义按键B SendKeys yours(num) If (num < 10) Then num = num + 1 Else num = 0 End If CallKeyHookProc = 1 '屏蔽按键 End If 再在Private Sub Form_Load()中加入kg = 1 '1代表 是开着的就行了, 拿你分真不容易啊!
补充: 还要在模块的顶部就是 Public num As Long Public yours(10) As Long 的下面定义这个 Public kg As Integer
先新建一个exe,写入以下代码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
在新建一个模块,插入以下代码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然后在窗体中加一个 button 按钮,就完成了运行后,点 按钮就把记事本打开,按 a键,就输入 123...把分给我啦,我已经没分下载东东了
Public num As Long
下面定义一个
Public yours(10) As Long
把 Private Sub Form_Load()改为Dim n As Integer
num = 0
For n = 0 To 10
yours(n) = n
Next再把模块中的
SendKeys num
num = num + 1
改为
SendKeys yours(num)
If (num < 10) Then num = num + 1
也用不着钩子吧,
可以在窗口的KEYDOWN事件中检查热键,
然后把数组中的内容显示到文本框。
If (num < 10) Then num = num + 1
ElseIf (num > 10) Then num = 0,我在这里加了这句。我的意思是想当它把数组中最后一个元素的数据输出时,再重新回到第一个元素继续输出,可是运行后,我发现我加的这句不起作用。。应该怎样改?
改为If (num < 10) Then
num = num + 1
else
num = 0
EndIf
kg = kg Xor 1
End If
If (keyMsg.vKey And &HFF) = vbKeyB And kg = 1 Then'设置自定义按键B
SendKeys yours(num)
If (num < 10) Then
num = num + 1
Else
num = 0
End If
CallKeyHookProc = 1 '屏蔽按键
End If
再在Private Sub Form_Load()中加入kg = 1 '1代表 是开着的就行了,
拿你分真不容易啊!
还要在模块的顶部就是
Public num As Long
Public yours(10) As Long
的下面定义这个
Public kg As Integer