HotKeySet

首页  后退  前进

HotKeySet

 

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

 

HotKeySet ( "key" [, "function"] )

参数

key

设置组合键的热键. 按键格式与 Send(). 见备注

function

[可选] 热键调用的函数名. 留空则撤销此前设置的热键

返回值

成功:

返回 1.

失败:

返回 0.

备注

建议使用小写字母键(例如 "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

----------------------------------------