如何在窗体中监听F1-F12功能键阿!可否给出代码,不胜感谢!
解决方案 »
- 34岁的我还能否继续做软件?
- ActiveX访问服务器端数据库的问题
- <font color=blue><b>关于VB写PDF文件阅读器的讨论!!!</b></font>
- 如何历遍目录下的所有ASP文件,并且在所有文件最前面加入一行代码?
- 当窗体体Me.BorderStyle = 0使用什么API可以改变窗体的大小
- VB菜鸟提关于API函数的问题。急!
- Crystal Reports是如何在vb6中显示,使用呢,
- 用什么函数判断输入的是负数?
- 如何将两个datagird中的数据整合到一个datagird中输出(vb6.0中)
- 请问学vb该如何进阶?
- 请教在Excel中的高级操作。
- 用VB调用Word的时候怎样屏蔽掉Word窗体上的 [X]
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 LongPublic 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 ExplicitSub 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 SubSub 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 SubPrivate Sub Form_Load()
RegHook Command1.hwnd, Command2.hwnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHook Command1.hwnd, Command2.hwnd
End Sub
If KeyCode = vbKeyF5 Then
'通知所有主机刷新
End If
End Sub这个是按F5的情况,依此类推
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
If KeyCode >= 112 And KeyCode <= 123 Then
MsgBox "F" & CStr(KeyCode - 111)
End If
End Sub