基 础 函 数 参 考


HotKeySet

设置调用用户函数的热键.

HotKeySet ( "热键" [, "函数"] )

参 数

热键 设置组合键的热键. 按键格式与 Same format as Send() 函数使用的相同.
函数 [可选参数] 热键调用的函数名. 留空则撤销此前设置的热键.

返 回 值

成功: 返回 1.
失败: 返回 0.

备 注

It is better to use the lower keyboard key as for keyboard as Russian one, the unshifted key is not the lower value. 即 "D" is not the upper case of "B". The Hotkey will not be set and a failure will occur.(译注:似乎是关于俄罗斯键盘的!)

如果两个 AutoIt 脚本设置相同的热键, 应该避免同时运行这两个脚本.
(否则第二个脚本将无法捕获热键,除非第一个脚本终止运行或注销第二个脚本设置的热键.)

用户按下热键后通常会中断当前运行中的 AutoIt 函数/语句, 并运行该热键关联的用户函数, 直到其完成操作或被中断为止. 但也会有些例外:
1) 如果当前运行的函数是个"阻断型(blocking)"函数, 则键击动作将被缓冲, 并等待该阻断型函数完成操作后继续执行.
MsgBox 与 FileSelectFolder 就是典型的阻断型函数. 您可以试试下面示例脚本中定义的热键 Shift-Alt-d.
2) 如果在 AutoIt 托盘菜单上选择了暂停脚本,则任何在暂停期间按下的热键都将被忽略.

下面的快捷键不能设置为热键:

Ctrl+Alt+Delete 由 Windows 系统保留
F12 也是由 Windows 保留, 涉及到 API.
数字键盘" Enter "回车键 使用 {Enter} 可同时捕获主键盘和小键盘上的回车键.
Win+B,D,E,F,L,M,R,U; 与 Win+Shift+M 这些都是 Windows 内置的快捷键. 注意: Win+B 与 Win+L 仅由 Windows XP 及以上系统保留.
Alt, Ctrl, Shift, Win 这些都是组合按键!
其它 任何由第三方软件定义的全局热键, 任何由两个或更多"基键"组成的热键,
例如 '{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 宏可以使用内部函数处理同一个函数的多个键.

相 关 函 数

Send, GUISetAccelerators

函 数 示 例


; 点击 Esc 结束脚本, 点击 Pause/Break 使脚本暂停

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;点击 Shift + Alt + d

;;;; 这里总是程序的主体 ;;;;
While 1
    Sleep(100)
WEnd
;;;;;;;;
;;;;;;;;

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('脚本 "暂停"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    Exit 0
EndFunc   ;==>Terminate

Func ShowMessage()
    MsgBox(4096, "", "这是一个消息.")
EndFunc   ;==>ShowMessage

provider with jb51.net (unicode)