类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
如何在窗体中监听F1-F12功能键阿!可否给出代码,不胜感谢!
网友回答:
Option Explicit
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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 Long
Public Const WM_HOTKEY = &H312
Public Const MOD_CONTROL = &H2
Public Const GWL_WNDPROC = (-4)
Public hWndLong(1 To 2) As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long
Dim S1 As Long
Dim S2 As Long
Public 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
Select Case wParam
Case 1&
MsgBox "F1"
Case 2&
MsgBox "F2"
End Select
End If
If wParam = 1& Then
WndProc = CallWindowProc(hWndLong(1), hwnd, Msg, wParam, lParam)
Else
WndProc = CallWindowProc(hWndLong(2), hwnd, Msg, wParam, lParam)
End If
End Function
==================================
Option Explicit
Sub UnHook(ByVal hWnd1 As Long, ByVal hWnd2 As Long)
Dim ret As Long
ret = SetWindowLong(hWnd1, GWL_WNDPROC, hWndLong(1))
Call UnregisterHotKey(hWnd1, uVirtKey)
ret = SetWindowLong(hWnd2, GWL_WNDPROC, hWndLong(2))
Call UnregisterHotKey(hWnd2, uVirtKey)
End Sub
Sub RegHook(ByVal hWnd1 As Long, ByVal hWnd2 As Long)
Dim ret As Long
hWndLong(1) = GetWindowLong(hWnd1, GWL_WNDPROC)
ret = SetWindowLong(hWnd1, GWL_WNDPROC, AddressOf WndProc)
idHotKey = 1
Modifiers = 0&
uVirtKey = vbKeyF1
ret = RegisterHotKey(hWnd1, idHotKey, Modifiers, uVirtKey)
hWndLong(2) = GetWindowLong(hWnd2, GWL_WNDPROC)
ret = SetWindowLong(hWnd2, GWL_WNDPROC, AddressOf WndProc)
idHotKey = 2
Modifiers = 0&
uVirtKey = vbKeyF2
ret = RegisterHotKey(hWnd2, idHotKey, Modifiers, uVirtKey)
End Sub
Private Sub Form_Load()
RegHook Command1.hwnd, Command2.hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHook Command1.hwnd, Command2.hwnd
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF5 Then
通知所有主机刷新
End If
End Sub
这个是按F5的情况,依此类推
干嘛这么麻烦,在窗体的keydown事件处理
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF1
MsgBox "F1"
Case vbKeyF2
MsgBox "F2"
Case vbKeyF3
MsgBox "F3"
Case vbKeyF4
MsgBox "F4"
Case vbKeyF5
MsgBox "F5"
Case vbKeyF6
MsgBox "F6"
Case vbKeyF7
MsgBox "F7"
Case vbKeyF8
MsgBox "F8"
Case vbKeyF9
MsgBox "F9"
Case vbKeyF10
MsgBox "F10"
Case vbKeyF11
MsgBox "F11"
Case vbKeyF12
MsgBox "F12"
End Select
End Sub
窗体keypreview设为true