高手麻烦告诉一下怎么用RegisterHotKey一个一个注册呢? 我的代码如下: Module: Option Explicit Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As LongPublic Const WM_HOTKEY = &H312 Public Const MOD_ALT = &H1 Public Const MOD_CTRL = &H2 Public Const MOD_SHIFT = &H4 Public Const GWL_WNDPROC = (-4) Public preWinProc As Long, progName As String Public Modifiers As Long, uVirtKey As Long, idHotKey As LongPrivate Type taLong ll As Long End Type Private Type t2Int lWord As Integer hword As Integer End TypePublic Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_HOTKEY Then If wParam = idHotKey Then Dim lp As taLong, i2 As t2Int lp.ll = lParam LSet i2 = lp If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then Shell "notepad.exe", vbNormalFocus End If End If End If wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam) End FunctionForm1:Private Sub KeyMonitor(just As Boolean) If just = True Then preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC) ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc) idHotKey = 1 progName = "mspaint.exe" Modifiers = MOD_CTRL + MOD_ALT uVirtKey = vbKeyF1 ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey) Else ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc) Call UnregisterHotKey(Me.hwnd, uVirtKey) End If End SubKeyMonitor True 打开监视 KeyMonitor True 关闭监视这只能以此实现一个,我曾用数组想实现多个但没有成功,请高手执教
要的留下E-MAIL
不知道你想要什么.
谢谢!
用RegisterHotKey
我的代码如下:
Module:
Option Explicit
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As LongPublic Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CTRL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)
Public preWinProc As Long, progName As String
Public Modifiers As Long, uVirtKey As Long, idHotKey As LongPrivate Type taLong
ll As Long
End Type
Private Type t2Int
lWord As Integer
hword As Integer
End TypePublic Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
If wParam = idHotKey Then
Dim lp As taLong, i2 As t2Int
lp.ll = lParam
LSet i2 = lp
If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then
Shell "notepad.exe", vbNormalFocus
End If
End If
End If
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End FunctionForm1:Private Sub KeyMonitor(just As Boolean)
If just = True Then
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
idHotKey = 1
progName = "mspaint.exe"
Modifiers = MOD_CTRL + MOD_ALT
uVirtKey = vbKeyF1
ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
Else
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, uVirtKey)
End If
End SubKeyMonitor True 打开监视
KeyMonitor True 关闭监视这只能以此实现一个,我曾用数组想实现多个但没有成功,请高手执教
我的E-Mail:[email protected]
看看我的代码:
http://netbar.henan.com.cn/soft/sharp hotkey.rar
设置不同idHotKey,uVirtKey就可以注册不同快捷键如下
idHotKey1=1
idHotKey2=2ret = RegisterHotKey(Me.hwnd, idHotKey1, MOD_CTRL + MOD_ALT, vbKeyF1) 'CTRL+ALT+F1
ret2=RegisterHotKey(Me.hwnd, idHotKey2, MOD_CTRL + MOD_ALT, vbKeyF2) 'CTRL+ALT+F2
同时注册了两个快捷键