SetKeyDelay

设置每次 SendControlSend 发送键击后自动的延时.

SetKeyDelay Delay, PressDuration, "Play"

参数

Delay

类型: 整数

如果省略, 则保留当前的延时. 否则, 请指定毫秒表示的时间. 指定 -1 表示无延时, 或 0 表示最小延时(然而如果使用了 Play 参数, 则 0 和 -1 都表示无延时).

PressDuration

类型: 整数

某些游戏和特殊的应用程序可能要求每次键击具有一定的按下时间; 即按下按键后, 持续一段时间, 然后才松开.

如果省略, 则保留当前的按下持续时间. 否则, 请指定毫秒表示的时间. 指定 -1 表示无延时(默认), 或 0 表示最小延时(然而, 如果使用了 Play 参数, 则 0 和 -1 都表示无延时).

注意: PressDuration 也会在修饰键(Ctrl, Alt, Shift 和 Win) 状态发生任何变化后产生一个延迟, 以支持正在发送的键.

Play

类型: 字符串

如果为空或省略, 则将延时和按下持续时间适用于传统的 SendEvent 模式. 否则, 请指定单词 Play 会把上面的设置应用于 SendPlay 模式. 如果脚本没有使用过此参数, 则 SendPlay 总是 -1.

备注

默认情况下, 在传统的 SendEvent 模式中, 在每次通过 SendControlSend 发送键击后, 会自动进行 10 毫秒的短暂延迟(休眠). 这样做是为了提高脚本的可靠性, 因为有时窗口无法及时处理快速连续的按键输入。对于 SendPlay 模式, 默认延迟为 -1. 对于这两种模式, 默认的按住时长均为 -1.

在使用SendInput 模式(这是默认的) 时, 不会遵守 SetKeyDelay; 在这种模式下, 键击之间没有延时.

在延迟(睡眠) 期间, 使当前线程不可中断.

由于操作系统计时系统的精确度, 延时可能会被向上取整到最近的 10 或 15 的倍数.

对于 SendEvent 模式, 延时为 0 时实际内部会执行 Sleep(0), 这样会将脚本时间片的剩余部分分配给其他需要的进程. 如果没有进程需要, 那么 Sleep(0) 相当于完全没有延时. 与之相比, 延时为 -1 则从不休眠. 为了提高可靠性, 推荐使用 0 而不是 -1.

当延时设为 -1 时, 脚本的进程优先级会成为传统的 SendEvent 模式中键击发送速度的重要因素. 要提升脚本的优先级, 请使用 ProcessSetPriority "High". 尽管这通常会使得键击发送的速度超过活动窗口的处理速度, 不过系统会自动对它们进行缓冲. 在 Send 函数完成后, 被缓冲的键击会继续到达目标窗口(即使此窗口现在已经不是活动窗口). 这种情况一般是不要紧的, 因为任何后续发送给相同窗口的键击会排列在缓冲中的那些键击之后.

内置变量 A_KeyDelayA_KeyDuration 包含了 SendEvent 模式当前的设置值, 而 A_KeyDelayPlayA_KeyDurationPlay 包含了 SendPlay 模式当前的设置值. 它们也能直接赋新值, 而无需调用 SetKeyDelay.

每个新运行的线程(如 热键, 自定义菜单项定时子程序) 都会以此函数的默认设置开始. 这个默认设置可以通过在脚本启动中使用此函数来改变.

Send, ControlSend, SendMode, SetMouseDelay, SetControlDelay, SetWinDelay, Click

示例

在通过 SendControlSend 每次发送按键后, 产生尽可能小的延迟.

SetKeyDelay 0