作者eight0 (octō)
站内EzHotKey
标题Re: [AHK-] 请问如何解决keywait中断卡住key的状况?
时间Mon Jun 1 23:32:51 2015
※ 引述《bodhi (????)》之铭言:
: 举例: i就是123 o是5 快速按下i o时 i的123只出来12
: 然後就被5中断 由於o是keywait 所以o没放开 不但3出不来
: 而且i无法再输入 完全卡住 请问要如何解决这种冲突状况?
: 1. 能不能让3照预定程序输入 或是有没有办法直接取消掉?
: 2. keywait按住之下 如何让卡住的key恢复功能?
AHK 的 threads 并不是真的 multithread
https://www.autohotkey.com/docs/misc/Threads.htm
当你按下 i 键,执行到一半时,再按下 o 键,
这时 i 键的 thread 会被暂停,并进入 o 键的 thread;
必须等到 o 键的 thread 结束後,才会返回刚才 i 键的中断点
所以 12 印一半被 o 中断後,必须等 o 放开才会印出 3
并且因为 i 键的 thread 还没结束,你再按下 i 键也不会再印出 123
推文提到的
#MaxThreadsPerHotkey 2 是让每个热键 thread 上限变成 2
若加上了,会变成 5 键多送出一次,然後又在 KeyWait 的地方卡住
假设你的需求是
* 按住 i 键时重覆送出 123
* 按住 o 键时送出一次 5 down,直到放开再送出 5 up
我会这样写︰
i::
while (GetKeyState("i")) {
sleep 10
send {1 down}
sleep 10
send {1 up}
sleep 10
send {2 down}
sleep 10
send {2 up}
sleep 10
send {3 down}
sleep 10
send {3 up}
}
return
o::
if (!GetKeyState("5")) {
send {5 down}
}
return
o up::
send {5 up}
return
--
(* ̄▽ ̄)/‧★*"`'*-.,_,.-*'`"*-.,_☆,.-*`
http://i.imgur.com/oAd97.png
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.78.17
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/EzHotKey/M.1433172775.A.676.html
1F:推 bodhi: 我直接COPY 但是i按了没有反应... 06/02 15:45