Re: [AHK-] 請問如何解決keywait中斷卡住key的狀況?

看板EzHotKey作者 (????)時間10年前 (2015/06/02 16:03), 編輯推噓3(309)
留言12則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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://www.ptt.cc/bbs/EzHotKey/M.1433232198.A.9FE.html

06/02 16:20, , 1F
寫在最上面就可以了,所有 key:: label: 之前
06/02 16:20, 1F

06/02 18:14, , 2F
原來如此-.- 我竟然繞了一大圈....
06/02 18:14, 2F

06/02 18:16, , 3F
結果我用flag測試過以後 中途按key 還是會中斷目前輸入
06/02 18:16, 3F

06/02 18:18, , 4F
如果把123的23設定成函式執行 o按下時就跳出函式不執行
06/02 18:18, 4F

06/02 18:19, , 5F
如果再按下i 一樣可以執行 這樣有搞頭嗎?
06/02 18:19, 5F

06/02 18:21, , 6F
可以從別的key取消目前執行緒的後續指令嗎@@? 理論上ok吧?
06/02 18:21, 6F

06/02 19:15, , 7F
如前一篇所說,要等 o 鍵的執行緒結束後才會返回中斷點
06/02 19:15, 7F

06/02 19:15, , 8F
話說 i 鍵沒反應是什麼意思?
06/02 19:15, 8F

06/02 20:31, , 9F
那o執行完 可以不返回i的中斷點嗎@@? 就是取消掉後續指令
06/02 20:31, 9F

06/02 20:34, , 10F
你上一篇給的i 按了沒有任何輸出@@
06/02 20:34, 10F

06/03 01:48, , 11F
可以判斷是否執行緒被中斷 再用 return 跳過後續指令
06/03 01:48, 11F

06/03 01:49, , 12F
不過我覺得可以先找出 i 沒有輸出的原因,我這邊正常
06/03 01:49, 12F
文章代碼(AID): #1LRMD6d- (EzHotKey)
討論串 (同標題文章)
文章代碼(AID): #1LRMD6d- (EzHotKey)