autohotkey - 为什么 Autohotkey 中的“Keywait”会导致打字时两个字母被替换?
问题描述
我有这个脚本:
#IfWinActive Oxford Advanced Learner's Dictionary
$m::
KeyWait,m,T0.25
If (ErrorLevel)
{
Click, 210,563, 10
sleep,100
Send, {Down}
KeyWait,m
}
Else
{
Send, m
}
return
$i::
KeyWait, i, T0.25
If (ErrorLevel) {
Loop 7
Click, 768,192,3
} else {
Send, i
}
return
但是当我输入字母m并i快速输入“mi”时,它会输入“im”。但是当我键入它们的速度较慢时,不会出现任何问题。为什么会发生这种情况,我该如何解决这个问题?
解决方案
我认为 Threads页面中的这句话与此处相关:
尽管 AutoHotkey 实际上并不使用多个线程,但它模拟了其中的一些行为:如果启动了第二个线程——例如在前一个仍在运行时按下另一个热键——当前线程将被中断(暂时停止)以允许新线程成为当前线程。如果在第二个线程仍在运行时启动了第三个线程,则第二个和第一个线程都将处于休眠状态,依此类推。
当前线程结束后,将恢复最近中断的线程,以此类推,直到所有线程最终结束。
我相信当您在 m 之后快速键入 i 时,当 m keywait 仍在超时范围内时,它会暂停该 keywait 并运行 i。
至于如何解决这个问题,只需在 m 热键中添加“关键”,请注意,这会使它在此完成之前不会运行其他热键,但它会排队:
#IfWinActive Oxford Advanced Learner's Dictionary
$m::
Critical
KeyWait,m,T0.25
If (ErrorLevel)
{
Click, 210,563, 10
sleep,100
Send, {Down}
KeyWait,m
} else {
Send, m
}
return
$i::
KeyWait, i, T0.25
If (ErrorLevel) {
Loop 7
Click, 768,192,3
} else {
Send, i
}
return
推荐阅读
- r - 将聚合函数应用于具有自定义输出名称的多个 data.table 列
- rust - 'cargo run' 和启动 .exe 文件之间的区别
- angular - 如何在 p-card 中设置固定宽度
- ruby-on-rails - 是否可以覆盖 SimpleForm 生成的表单字段的基“类”?
- python - 基于字典和 str.contains() 的新数据框列
- javascript - 您可以使用 reduce 根据一系列数字是否递增来返回布尔值吗?
- asp.net - 数据库项目和Web项目之间的循环依赖
- flutter - 将数据推送到firebase,颤动
- sql - 如何在 Telerik Reporting Designer 中将架构名称作为参数传递
- reactjs - npm install --save react-scroll-to-bottom 不起作用