autoit HotKeySet 函数(autohotkey会被检测到吗)不要告诉别人

随心笔谈3年前发布 admin
211 0 0

文章摘要

这篇文章介绍了AutoIt中的`HotKeySet`函数的使用方法,用于设置热键事件并关联相应的函数。`HotKeySet`的参数包括热键和函数名,函数名可选,若为空则撤销热键。函数返回值为1表示成功,0表示失败。同时,文章提到了以下注意事项: 1. 每个脚本最多可注册64个热键。 2. 避免同时运行多个设置相同热键的脚本,否则可能无法捕获热键。 3. 热键事件通常会在按下后暂停当前函数,但某些阻断型函数(如`MsgBox`)会等待其完成。 4. 按下热键后可能中断正在运行的AutoIt函数或语句。 5. 以下热键不可设置: - `Ctrl+Alt+Delete`(Windows保留) - `F12`(涉及API) - 小键盘上的`Enter` - `Win+B, D, E, F, L, M, R, U`及`Win+Shift+M`(Windows内置) - `Alt, Ctrl, Shift, Win`等辅助按键 - 其他由第三方定义的热键、由多个基键组成的热键(如`{F1}{F2}`)、任何形式如`{LALT}`或`{ALTDOWN}`的按键。 此外,文章还提到了一个示例代码,展示了如何在设置热键后捕获事件并发送到激活程序中。 总结:`HotKeySet`是AutoIt中常用的热键管理工具,需注意其限制和使用场景。



HotKeySet ( “热键” [, “函数名”] )

参数

热键
要设置的热键,按键格式与 Send() 函数使用的一样。

函数名
[可选参数] 按下热键后要调用的函数名。留空则撤销此前设置的热键。

返回值

成功:
返回值为1。

失败:
返回值为0。

注意

每个脚本程序最多能同时注册64个热键。

如果有两个 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 将尝试捕获指定按键事件但并不会把它传递到激活程序中,不过也有一个例外:按下 Lock 键(包括 NumLock、CapsLock 和 ScrollLock)在任何时候都将切换其相应状态!如果希望把捕获的热键事件发送到激活程序中,您就必须先注销该热键然后再调用 Send 或 ControlSend 函数:

; 捕获并传递按键事件

HotKeySet(“{Esc}”, “captureEsc”)

Func captureEsc()

    ; … 这里可定义要做的各种任务

    HotKeySet(“{Esc}”)

    Send(“{Esc}”)

    HotKeySet(“{Esc}”, “captureEsc”)

EndFunc

相关

Send, ControlSend

示例

; 按下 Esc 将终止脚本,按下 Pause/Break 则将“暂停”Global$PausedHotKeySet({PAUSE},“TogglePause”)HotKeySet({ESC},“Terminate”)HotKeySet(“+!d”,“ShowMessage”);Shift-Alt-d;;;; 这里是程序主体 ;;;;While1Sleep(100)WEnd;;;;;;;;Func TogglePause()$Paused=NOT$PausedWhile$Pausedsleep(100)ToolTip(‘脚本已被“暂停”’,0,0)WEndToolTip(“”)EndFuncFunc Terminate()Exit0EndFuncFunc ShowMessage()MsgBox(4096,“”,“这是一个对话框。”)EndFunc

© 版权声明

相关文章