SetKeyDelay

优质
小牛编辑
132浏览
2023-12-01

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

SetKeyDelay [, Delay, PressDuration, Play]

参数

Delay

毫秒表示的时间, 可以为 表达式. 使用 -1 表示无延时,而 0 表示最小延时(然而如果使用了 Play 参数,则 0 和 -1 都表示无延时)。留空此参数来保持当前的 Delay.

如果脚本中没有使用过 SetKeyDelay,则对于传统的 SendEvent 模式默认 Delay 为 10。对于 SendPlay 模式, 默认 Delay 为 -1. 对于这两种模式默认的 按住时长 (下面的) 为 -1.

PressDuration

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

使用 -1 表示无延时 (默认), 而 0 表示最小延时 (然而, 如果使用了 Play 参数, 则 0 和 -1 都表示无延时). 注: 这里的延时指按住按键的持续时间, 上面的延时是两次键击之间的间隔时间. 省略此参数来保留当前的 按住时长 不变.

注: PressDuration 同样会在支持其他按键发送的修饰键 (CTRL, ALT, SHIFT 和 WIN) 状态改变后产生延时.

此参数可以为 表达式.

Play
[v1.0.43+]

单词 Play 会把上面的设置应用于 SendPlay 模式 而不是传统的 SendEvent 模式. 如果脚本没有使用此参数, 则 SendPlay 模式的延时总是为 -1/-1.

备注

注: SetKeyDelay 的设置不会影响 SendInput; 在这种模式的键击之间没有延时. 当 SendMode Input 生效时对于 Send 同样如此.

在每次 SendControlSend 发送键击后会自动进行短暂的延时. 这样做提高了脚本的可靠性, 因为窗口有时无法响应快速的键击流.

由于操作系统计时系统的精确度, 延时可能会被向上取整到最近的 10 或 15 的倍数. 例如,在大部分 Windows XP 系统上介于 1 和 10(含边界)的延时都相当于 10 或 15(可能也适用于 2k)。

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

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

内置变量 A_KeyDelay 包含了 Send/SendEvent 模式的当前 Delay 设置。没有对应于 PressDurationSendPlayDelay 的内置变量。

每个新运行的 线程 (例如 热键, 自定义菜单项定时 子程序) 都会以此命令的默认设置开始. 通过在脚本的自动执行段 (脚本的顶部) 使用此命令可以改变这个默认设置.

相关

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

示例

SetKeyDelay, 0