Re: [AHK-] 请问如何解决keywait中断卡住key的状况?

楼主: eight0 (欸XD)   2015-06-01 23:32:51
※ 引述《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
作者: bodhi (????)   2015-06-02 15:45:00
我直接COPY 但是i按了没有反应...

Links booklink

Contact Us: admin [ a t ] ucptt.com