作者bodhi (????)
看板EzHotKey
标题Re: [AHK-] 请问如何解决keywait中断卡住key的状况?
时间Tue Jun 2 16:03:16 2015
※ 引述《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有办法直接初始化宣告变数吗? 就是在使用任何热键之前
我找到的相关说明 都是在函式 或是{}执行中才宣告 这样要多按一个"宣告钮"-.-
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.162.176.165
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/EzHotKey/M.1433232198.A.9FE.html
1F:推 eight0: 写在最上面就可以了,所有 key:: label: 之前 06/02 16:20
2F:→ bodhi: 原来如此-.- 我竟然绕了一大圈.... 06/02 18:14
3F:→ bodhi: 结果我用flag测试过以後 中途按key 还是会中断目前输入 06/02 18:16
4F:→ bodhi: 如果把123的23设定成函式执行 o按下时就跳出函式不执行 06/02 18:18
5F:→ bodhi: 如果再按下i 一样可以执行 这样有搞头吗? 06/02 18:19
6F:→ bodhi: 可以从别的key取消目前执行绪的後续指令吗@@? 理论上ok吧? 06/02 18:21
7F:推 eight0: 如前一篇所说,要等 o 键的执行绪结束後才会返回中断点 06/02 19:15
8F:→ eight0: 话说 i 键没反应是什麽意思? 06/02 19:15
9F:→ bodhi: 那o执行完 可以不返回i的中断点吗@@? 就是取消掉後续指令 06/02 20:31
10F:→ bodhi: 你上一篇给的i 按了没有任何输出@@ 06/02 20:34
11F:推 eight0: 可以判断是否执行绪被中断 再用 return 跳过後续指令 06/03 01:48
12F:→ eight0: 不过我觉得可以先找出 i 没有输出的原因,我这边正常 06/03 01:49