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

楼主: bodhi (????)   2015-06-02 16:03:16
※ 引述《eight0 (octō)》之铭言:
: ※ 引述《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
我主要用keywait是因为希望主体只执行一次 因为要按住o 所以没有keywait的话
会重复执行 又希望不要影响到其他key的长指令输入
我现在想用外部宣告flag=1来当判断式 然后执行后flag=0 这样按住也不会重复执行
就可以不使用keywait 但是问题来了 flag似乎无法在key::之外独立先行宣告
我找不到方法可以在开autohotkey时 不用按其他多余的key 就自动宣告这个变量
ahk有办法直接初始化宣告变量吗? 就是在使用任何热键之前
我找到的相关说明 都是在函式 或是{}执行中才宣告 这样要多按一个"宣告钮"-.-
作者: eight0 (欸XD)   2015-06-02 16:20:00
写在最上面就可以了,所有 key:: label: 之前
楼主: bodhi (????)   2015-06-02 18:14:00
原来如此-.- 我竟然绕了一大圈....结果我用flag测试过以后 中途按key 还是会中断目前输入如果把123的23设定成函式执行 o按下时就跳出函式不执行如果再按下i 一样可以执行 这样有搞头吗?可以从别的key取消目前执行绪的后续指令吗@@? 理论上ok吧?
作者: eight0 (欸XD)   2015-06-02 19:15:00
如前一篇所说,要等 o 键的执行绪结束后才会返回中断点话说 i 键没反应是什么意思?
楼主: bodhi (????)   2015-06-02 20:31:00
那o执行完 可以不返回i的中断点吗@@? 就是取消掉后续指令你上一篇给的i 按了没有任何输出@@
作者: eight0 (欸XD)   2015-06-03 01:48:00
可以判断是否执行绪被中断 再用 return 跳过后续指令不过我觉得可以先找出 i 没有输出的原因,我这边正常

Links booklink

Contact Us: admin [ a t ] ucptt.com