下面这段代码是设置CTRL+F10,CTRL+F11,CTRL+F12三个快捷键的操作。
新建一个工程,加入一个模块,窗体名为默认的form1模块中的代码如下:
Option ExplicitPublic Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = -4Public Const MOD_CTRL = &H2Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_F12 = &H7BPublic glWinRet As LongPublic Function CallbackMsgs(ByVal wHwnd As Long, ByVal wmsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long
If wmsg = WM_HOTKEY Then
Call DoFunctions(wp_id)
CallbackMsgs = 1
Exit Function
End If
CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wmsg, wp_id, lp_id)
End FunctionPublic Sub DoFunctions(ByVal vKeyID As Byte)
Form1.Show
Form1.WindowState = 0
DoEvents
If Form1.Visible = False Then
Form1.Show
Form1.WindowState = 0
End If
Form1.Cls
Select Case vKeyID
Case 0
Form1.Print "执行 CTRL+F10 的操作!"
Case 1
Form1.Print "执行 CTRL+F11 的操作!"
Case 2
Form1.Print "执行 CTRL+F12 的操作!"
End Select
End Sub窗体中的代码如下:
Option ExplicitDim retVal0 As Boolean, retVal1 As Boolean, retVal2 As BooleanPrivate Sub Form_Load()
Me.AutoRedraw = True MsgBox "将要设置 CTRL+F10, CTRL+F11, CTRL+F12 为快捷键"
retVal0 = RegisterHotKey(Me.hwnd, 0, MOD_CTRL, VK_F10)
If Not retVal0 Then
MsgBox "无法设置CTRL+F10为快捷键!", vbCritical
End If
retVal1 = RegisterHotKey(Me.hwnd, 1, MOD_CTRL, VK_F11)
If Not retVal1 Then
MsgBox "无法设置CTRL+F11为快捷键!", vbCritical
End If
retVal2 = RegisterHotKey(Me.hwnd, 2, MOD_CTRL, VK_F12)
If Not retVal2 Then
MsgBox "无法设置CTRL+F12为快捷键!", vbCritical
End If
If (retVal0 = False And retVal1 = False And retVal2 = False) Then
MsgBox "没有任何快捷键被设置!", vbCritical
End
End If
glWinRet = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs)
End Sub
Private Sub Form_Resize() If Me.WindowState = 1 Then
Me.Hide
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) If retVal0 = True Then
UnregisterHotKey Me.hwnd, 0
End If
If retVal1 = True Then
UnregisterHotKey Me.hwnd, 1
End If
If retVal2 = True Then
UnregisterHotKey Me.hwnd, 2
End If
End Sub
新建一个工程,加入一个模块,窗体名为默认的form1模块中的代码如下:
Option ExplicitPublic Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = -4Public Const MOD_CTRL = &H2Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_F12 = &H7BPublic glWinRet As LongPublic Function CallbackMsgs(ByVal wHwnd As Long, ByVal wmsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long
If wmsg = WM_HOTKEY Then
Call DoFunctions(wp_id)
CallbackMsgs = 1
Exit Function
End If
CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wmsg, wp_id, lp_id)
End FunctionPublic Sub DoFunctions(ByVal vKeyID As Byte)
Form1.Show
Form1.WindowState = 0
DoEvents
If Form1.Visible = False Then
Form1.Show
Form1.WindowState = 0
End If
Form1.Cls
Select Case vKeyID
Case 0
Form1.Print "执行 CTRL+F10 的操作!"
Case 1
Form1.Print "执行 CTRL+F11 的操作!"
Case 2
Form1.Print "执行 CTRL+F12 的操作!"
End Select
End Sub窗体中的代码如下:
Option ExplicitDim retVal0 As Boolean, retVal1 As Boolean, retVal2 As BooleanPrivate Sub Form_Load()
Me.AutoRedraw = True MsgBox "将要设置 CTRL+F10, CTRL+F11, CTRL+F12 为快捷键"
retVal0 = RegisterHotKey(Me.hwnd, 0, MOD_CTRL, VK_F10)
If Not retVal0 Then
MsgBox "无法设置CTRL+F10为快捷键!", vbCritical
End If
retVal1 = RegisterHotKey(Me.hwnd, 1, MOD_CTRL, VK_F11)
If Not retVal1 Then
MsgBox "无法设置CTRL+F11为快捷键!", vbCritical
End If
retVal2 = RegisterHotKey(Me.hwnd, 2, MOD_CTRL, VK_F12)
If Not retVal2 Then
MsgBox "无法设置CTRL+F12为快捷键!", vbCritical
End If
If (retVal0 = False And retVal1 = False And retVal2 = False) Then
MsgBox "没有任何快捷键被设置!", vbCritical
End
End If
glWinRet = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs)
End Sub
Private Sub Form_Resize() If Me.WindowState = 1 Then
Me.Hide
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) If retVal0 = True Then
UnregisterHotKey Me.hwnd, 0
End If
If retVal1 = True Then
UnregisterHotKey Me.hwnd, 1
End If
If retVal2 = True Then
UnregisterHotKey Me.hwnd, 2
End If
End Sub
解决方案 »
- 问一个图片亮度和对比度的问题,告知理论即可
- VBA内comboBox初始数据问题
- public const WM_COMMAND = &H111 什么意思?
- 寻求Access数据压缩的解决之道
- vb+access如何进行数据上传汇总,请各位高手赐教!
- 高手,请问,如何在vb中编程实现 net send 局域网中的桌面信使服务
- 怎样使动态添加的控件加在指定PICTURE 容器控件里 而不是在窗体上
- webbrower 如何给DIV赋值问题
- 如何实现当鼠标放到Commandbutton上时,Commandbutton自动移动,使鼠标不能点击Commandbutton
- WinSock方面问题
- *#!_@`` 请教:如何用image或picture控件通过ADO往access2002中添加图片?``@_!#*
- 拜托,怎么就没有人回答呢?斑竹在吗?巴顿,老朋友也麻烦你看看,好吗?
如果你们的窗体失去焦点后,还能响应这些快捷键吗?
把题目看清楚点,好吗!
(&x)只在form获得焦点时有效
Const HOTKEYF_CONTROL = &H2
Const HOTKEYF_ALT = &H4Private Sub Form_Load()
Dim l As Long
Dim wHotkey As Long
wHotkey = (HOTKEYF_ALT Or HOTKEYF_CONTROL) * 256 + vbKeyF
l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0)
'直接SendMessage注册热键
End Sub
不过,我这里没有源代码,不能帮你。你可以去
www.dapha.net
www.21code.com
找一下。
这两个都是VB源代码的基地
在窗体上加入一个Timer 控件
然后:Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPublic Const VK_F12 = &H7BPublic Function MyHotKey(vKeyCode) As Boolean
MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
End FunctionPrivate Sub Timer1_Timer()
If MyHotKey(VK_F12) Then。
End If
End Sub
真是的。