RegisterHotKey这个API可以实现.
至于API声明,可以查查API大全.
Public Sub Hitjian()
Dim msgb As Msg
'注册Ctrl◆E为热键
RegisterHotKey Main.hWnd, HBFFF, MOD_CONTROL, vbKeyE
Main.Show '显示Hot对象
HotKey_Flg = False
'循环检测
Do While Not HotKey_Flg
'等待消息
WaitMessage
'检测热键是否被按下
If PeekMessage(msgb, Main.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
'这里可以填写事件
'Dim i As Long
'i = EnumWindows(AddressOf EnumWindowsProc, 0)
If JinJihuibiText "进行待机" Then
Shell JinJihuibiText, vbMaximizedFocus
Else
进行待机
End If
'转让控制权,允许操作系统处理其他事件
DoEvents
Loop
End Sub
不清楚热键和快捷键是什么区别
CheckOnClick 在菜单项上单击时是否改变Checked属性
Checked 设置/获取 菜单项是否被选中
新建一模块,输入下列内容
'-------------------------------------
'系统热键模块
'------------------------------------
Option Explicit
Const MOD_ALT = H1
Dim key_preWinProc As Long '用来保存窗口信息
Dim key_Modifiers As Long, key_uVirtKey As Long, key_idHotKey As Long
Dim key_IsWinAddress As Boolean '是否取得窗口信息的判断
Function keyWndproc(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 'wParam 值就是 key_idHotKey
MsgBox "aa"
MsgBox "bb"
MsgBox "cc"
End Select
'将消息传送给指定的窗口
keyWndproc = CallWindowProc(key_preWinProc, hwnd, Msg, wParam, lParam)
End Function
Function SetHotkey(ByVal KeyId As Long, ByVal KeyAss0 As String, ByVal Action As String)
Dim KeyAss1 As Long
Dim i As Long
i = InStr(1, KeyAss0, ",")
If i = 0 Then
KeyAss1 = Val(KeyAss0)
KeyAss1 = Right(KeyAss0, Len(KeyAss0) - i)
key_idHotKey = 0
key_Modifiers = 0
key_uVirtKey = 0
If key_IsWinAddress = False Then '判断是否需要取得窗口信息,如果重复取得,再最后恢复窗口时,将会造成程序死掉
'记录原来的window程序地址
key_preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
'用自定义程序代替原来的window程序
SetWindowLong Form1.hwnd, GWL_WNDPROC, AddressOf keyWndproc
key_idHotKey = KeyId
Select Case Action
Case "Add"
key_uVirtKey = Val(KeyAss1)
RegisterHotKey Form1.hwnd, key_idHotKey, key_Modifiers, key_uVirtKey '向窗口注册系统热键
key_IsWinAddress = True '不需要再取得窗口信息
Case "Del"
SetWindowLong Form1.hwnd, GWL_WNDPROC, key_preWinProc '恢复窗口信息
UnregisterHotKey Form1.hwnd, key_uVirtKey '取消系统热键
key_IsWinAddress = False '可以再次取得窗口信息
希望某一字符成为访问键,也可以在该字符前面加上一个 () 字符.
可以通过在 Caption 属性设置中使用 字符来为命令、菜单、和控件指定访问键.
单击按钮执行操作,在程序执行时,按?CommandButton?的快捷键(ALT?◆?带下划线的字母)是一种快捷键方法(见上图).
access key(访问键),键盘上的字符,这些字符在菜单上或对话框中加有下划线或突出显示.同时按下 ALT 键和访问键可以激活菜单或对话框.有时候用来指代热键.
赋值访问键和快捷键:通过定义访问键和快捷键可改进键盘对菜单命令的访问.
①选取要赋值访问键的菜单项.
快捷键:
要对菜单项赋值快捷键,请按照以下步骤执行:
要删除快捷键赋值,应选取列表顶部的?"(none)".
把下面的代码复制到窗体的代码里就行了,这里注册的是QQ的默认热键,你先运行这个程序,再运行QQ,就会把QQ的默认热键屏蔽掉了.
Private
Declare
Function
RegisterHotKey
Lib
(ByVal
hWnd
As
Long,
ByVal
id
fsModifiers
vk
Long)
Long
UnregisterHotKey
Const
MOD_ALT
=
'Alt键
MOD_CONTROL
'Ctrl键
MOD_SHIFT
'Shift键
Sub
Form_Load()
Dim
ret
RegisterHotKey(Me.hWnd,
◆
MOD_CONTROL,
vbKeyZ)
'注册热键Ctrl◆Alt◆Z
If
Then
MsgBox
"注册热键失败,请使用其它热键!",
vbCritical,
"错误"
End
Form_QueryUnload(Cancel
Integer,
UnloadMode
Integer)
Call
UnregisterHotKey(Me.hWnd,
检测热键是否按下,最好用PeekMessage函数.
注册热键时,最好把RegisterHotKey函数的第二个参数设为HBFFF以上的数.
程序结束时,应用UnregisterHotKey注销热键.
上面三条只是建议,不一定可以.