HotKeySet
设置调用用户函数的热键.
HotKeySet ( "key" [, "function"] )
参数
key
|
设置组合键的热键. 按键格式与 Send(). 见备注
|
function
|
[可选] 热键调用的函数名. 留空则撤销此前设置的热键
|
返回值
备注
建议使用小写字母键(例如 "b" 不是 "B")设置热键, 以避免错误. 某些布局键盘的大写和小写键可以映射为不同的热键.
匈牙利键盘这样的 102 键需要使用 "{OEM_102}" 来捕捉 "í" 键.
如果两个 AutoIt 脚本设置相同的热键, 应该避免同时运行这两个脚本.
否则第二个脚本将无法捕获热键,除非第一个脚本终止运行或注销第二个脚本设置的热键.
如果脚本中使用多个 GUI, 可以考虑使用 GUISetAccelerators() 函数, 因为只有当父 GUI 激活时这些在热键有效.
用户按下热键后通常会中断当前运行中的 AutoIt 函数/语句, 并运行该热键关联的用户函数, 直到其完成操作或被中断为止. 但也会有些例外:
1) 如果当前运行的函数是个"阻断型(blocking)"函数, 则键击动作将被缓冲, 并等待该阻断型函数完成操作后继续执行. MsgBox() 与 FileSelectFolder() 就是典型的阻断型函数. 您可以试试下面示例脚本中定义的热键 Shift-Alt-d.
2) 如果在 AutoIt 托盘菜单上选择了暂停脚本,则任何在暂停期间按下的热键都将被忽略.
下面的快捷键不能设置为热键:
ASC nnnn
|
不能用于 Send(). 当"{...}"无效时会第一个字符"A"传递给 Send()
|
Ctrl+Alt+Delete
|
由 Windows 系统保留
|
F12
|
也是由 Windows 保留, 涉及到 API.
|
NumPad's Enter Key
|
相反, 两个 {Enter} 键都会被捕获
|
Win+B,D,E,F,L,M,R,U; and Win+Shift+M
|
这些都是 Windows 内置的快捷键. 注意: Win+B 与 Win+L 仅由 Windows XP 及以上系统保留.
|
Alt, Ctrl, Shift, Win
|
这些都是组合按键!
|
Other
|
任何由第三方软件定义的全局热键, 任何由两个或更多"基键"组成的热键,
例如 '{F1}{F2}', 任何型如 '{LALT}' 或 '{ALTDOWN}' 的按键.
|
设置了热键后,AutoIt 将捕获指定按键事件, 不会把它传递到激活程序中,
有一个例外: 锁定键 (NumLock, CapsLock, 与 ScrollLock) 都将切换其相应状态!
Send() 发送组合键将触发 HotKeySet() 事件, 可使用 ControlSend() 或注销 HotKeySet() 事件, 否则, Send() 事件可能引发无限循环.
; 捕获并传递按键事件
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
; ... 要做的事
HotKeySet("{Esc}")
Send("{Esc}")
HotKeySet("{Esc}", "captureEsc")
EndFunc
调用的函数不能指定参数, 它将会被忽略.
@HotKeyPressed 宏可以使用内部函数处理同一个函数的多个键.
相关
GUISetAccelerators, Send
函数示例
示例 1
#include <MsgBoxConstants.au3>
; Press Esc to terminate script, Pause/Break to "pause"
Global $g_bPaused = False
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d
While 1
Sleep(100)
WEnd
Func TogglePause()
$g_bPaused = Not $g_bPaused
While $g_bPaused
Sleep(100)
ToolTip('Script is "Paused"', 0, 0)
WEnd
ToolTip("")
EndFunc ;==>TogglePause
Func Terminate()
Exit
EndFunc ;==>Terminate
Func ShowMessage()
MsgBox($MB_SYSTEMMODAL, "", "This is a message.")
EndFunc ;==>ShowMessage
示例 2
#include <MsgBoxConstants.au3>
; Press Esc to terminate script, Pause/Break to "pause"
Global $g_bPaused = False
HotKeySet("{PAUSE}", "HotKeyPressed")
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("+!d", "HotKeyPressed") ; Shift-Alt-d
While 1
Sleep(100)
WEnd
Func HotKeyPressed()
Switch @HotKeyPressed ; The last hotkey pressed.
Case "{PAUSE}" ; String is the {PAUSE} hotkey.
$g_bPaused = Not $g_bPaused
While $g_bPaused
Sleep(100)
ToolTip('Script is "Paused"', 0, 0)
WEnd
ToolTip("")
Case "{ESC}" ; String is the {ESC} hotkey.
Exit
Case "+!d" ; String is the Shift-Alt-d hotkey.
MsgBox($MB_SYSTEMMODAL, "", "This is a message.")
EndSwitch
EndFunc ;==>HotKeyPressed
----------------------------------------
|