下面这个是别人给我的例子.
建一个comboBox 再把代码复制进去.
选择一个快捷键.再下快捷键就可以弹出msgbox我想问的是:
如果我有2个comboBox呢?
一个是combo1(0)
一个是combo1(1)
那要怎么实现
combo1(0)弹出 msgbox "你好"
combo1(1)弹出 msgbox "我好" ==========================================================================
'模块
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 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 WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105 Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13
Private lngHook As Long Public vbHotKey As Long
Public vbHotKeyText As StringPublic Function HotKey(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN
Call CopyMemory(p, ByVal lParam, Len(p)) If p.vkCode = vbHotKey Then '这里定义热键
MsgBox "你好" '这里,执行你要执行的程序,我这里示范msgbox
End If
Case Else End Select
End If
Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
End Function Public Sub HooK()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HotKey, App.hInstance, 0)
End Sub Public Sub UnHooK()
Call UnhookWindowsHookEx(lngHook)
End Sub ==========================================================================
'窗体
Private Sub Combo1_Click()
Select Case Combo1.Text
Case "F1"
vbHotKey = vbKeyF1
Case "F2"
vbHotKey = vbKeyF2
Case "F3"
vbHotKey = vbKeyF3 Case "1"
vbHotKey = vbKey1
Case "2"
vbHotKey = vbKey2
Case "3"
vbHotKey = vbKey3 End Select vbHotKeyText = Combo1.Text
End SubPrivate Sub Form_Load()
HooK
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHooK
End Sub
建一个comboBox 再把代码复制进去.
选择一个快捷键.再下快捷键就可以弹出msgbox我想问的是:
如果我有2个comboBox呢?
一个是combo1(0)
一个是combo1(1)
那要怎么实现
combo1(0)弹出 msgbox "你好"
combo1(1)弹出 msgbox "我好" ==========================================================================
'模块
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 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 WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105 Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13
Private lngHook As Long Public vbHotKey As Long
Public vbHotKeyText As StringPublic Function HotKey(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN
Call CopyMemory(p, ByVal lParam, Len(p)) If p.vkCode = vbHotKey Then '这里定义热键
MsgBox "你好" '这里,执行你要执行的程序,我这里示范msgbox
End If
Case Else End Select
End If
Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
End Function Public Sub HooK()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HotKey, App.hInstance, 0)
End Sub Public Sub UnHooK()
Call UnhookWindowsHookEx(lngHook)
End Sub ==========================================================================
'窗体
Private Sub Combo1_Click()
Select Case Combo1.Text
Case "F1"
vbHotKey = vbKeyF1
Case "F2"
vbHotKey = vbKeyF2
Case "F3"
vbHotKey = vbKeyF3 Case "1"
vbHotKey = vbKey1
Case "2"
vbHotKey = vbKey2
Case "3"
vbHotKey = vbKey3 End Select vbHotKeyText = Combo1.Text
End SubPrivate Sub Form_Load()
HooK
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHooK
End Sub
比如 vbHotKey1和vbHotKey2然后
If p.vkCode = vbHotKey1 Then '这里定义热键
MsgBox "你好" '这里,执行你要执行的程序,我这里示范msgbox
End If
If p.vkCode = vbHotKey2 Then '这里定义热键
MsgBox "你好" '这里,执行你要执行的程序,我这里示范msgbox
End If 改写这个:
Private Sub Combo1_Click(index)
if index = 0 then
Select Case Combo1.Text
Case "F1"
vbHotKey1 = vbKeyF1
Case "F2"
vbHotKey1 = vbKeyF2
Case "F3"
vbHotKey1 = vbKeyF3
...
else
Select Case Combo1.Text
Case "F1"
vbHotKey2 = vbKeyF1
Case "F2"
vbHotKey2 = vbKeyF2
Case "F3"
vbHotKey2 = vbKeyF3 Case "1"
vbHotKey2 = vbKey1
...
End Sub