Private Sub Command1_Click()
Shell "notepad.exe", vbNormalFocus
AddHook
End SubPrivate Sub Form_Load()
Dim n As Integer
num = 0
For n = 0 To 10
yours(n) = n
Next
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 yours(10) 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 yours(num)
If (num < 10) Then 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现在这个程序是输出数组中的数字,现在我想把LONG型数组改成字符型数组,然后定义好每个元素的字符(比如:第一个元素是"aaa",第二个元素是"bbb"等),然后再一个一个的把每个数组元素输出,如何改?
Shell "notepad.exe", vbNormalFocus
AddHook
End SubPrivate Sub Form_Load()
Dim n As Integer
num = 0
For n = 0 To 10
yours(n) = n
Next
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 yours(10) 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 yours(num)
If (num < 10) Then 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现在这个程序是输出数组中的数字,现在我想把LONG型数组改成字符型数组,然后定义好每个元素的字符(比如:第一个元素是"aaa",第二个元素是"bbb"等),然后再一个一个的把每个数组元素输出,如何改?
yours = Array("a", "b", "c", "d", "e", "f", "g", "h", "r", "g", "h")
然后把模块里的Public yours(10) As Long 定义成Public yours变体型
字符数组中我不想用你这种方式,我想用分别定义的形式:yours(0)="aaa",yours(1)="bbb"等等!
还有你说的这个Public yours变体型,变体型是什么?
变体型才能用 yours = Array("a", "b", "c", "d", "e", "f", "g", "h", "r", "g", "h")
Private Sub Form_Load()
Dim n As Integer
num = 0
For n = 0 To 10
yours(n) = n
Next
End SubPublic yours(10) As Long
[color=#FF0000]现在这个程序是输出数组中的数字,现在我想把LONG型数组改成字符型数组,然后定义好每个元素的字符(比如:第一个元素是"aaa",第二个元素是"bbb"等),然后再一个一个的把每个数组元素输出,如何改?
Private sub Form_Load()yours(0) = "aaa"
yours(1) = "bbb"
yours(2) = "ccc"
'...end subPublic yours(10) as String
[color=#FF0000]再问个新问题!
我还想对这个程序设置一个热键,用来开始\暂停程序的运行,怎样设置这个热键?
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按A键 就是开关,按B键 就输出yours数组的东西,但运行的时候,一按A或B键就说编译错误,然后VB6.0直接关闭了!搞不懂哪里错啦?