- 標題:
按鍵持續(xù)按下 / 防止自動重復 / 按鍵按下狀態(tài) - 標簽:
AutoHotkey | AHK | Timer | 計時器 | 定時器 | GetKeyState | 獲取按鍵狀態(tài) | 持續(xù) | 保持 | 按下 | 抬起 | 釋放 | 狀態(tài) | 形態(tài) | 重復 | 間隔 | 阻塞 - 標注:
http://www.itdecent.cn/p/374615ff8006
http://www.itdecent.cn/u/1275d25b625e
AutoHotkey中只有少數(shù)按鍵(例如控制鍵和鎖定鍵)帶有按下(Down)和抬起(Up)形態(tài);若想設計可持續(xù)按下的熱鍵,則很有可能觸發(fā)系統(tǒng)的自動重復事件(保持按下一段時間后的自動重復)。雖然可以通過調整鍵盤屬性或啟用重復鍵來改善此現(xiàn)象,但讓系統(tǒng)設置反向適應腳本的行為顯得有些本末倒置。
-
鍵盤 屬性
可保存為快捷方式或嵌套于命令行使用。C:\Windows\System32\rundll32.exe C:\WINDOWS\System32\shell32.dll,Control_RunDLL C:\WINDOWS\System32\main.cpl,@1 -
設置篩選鍵
控制面板路徑。控制面板\輕松使用\輕松使用設置中心\設置篩選鍵 -
設置重復鍵和慢速鍵
控制面板路徑。控制面板\輕松使用\輕松使用設置中心\設置重復鍵和慢速鍵
本文將為您介紹,如何通過簡單的判定邏輯來避免系統(tǒng)的自動重復事件。
Global 示例按鍵 := "g"
Global 示例按鍵_間隔 := 200 ; 按鍵重復的間隔.
Global 示例按鍵_已釋放 := 1 ; 默認為抬起狀態(tài).
Hotkey, %示例按鍵%, 示例標簽 ; 創(chuàng)建熱鍵.
Return ; END AUTO-EXECUTE |
示例標簽: ; 標簽: 邏輯入口.
If !示例按鍵_已釋放 ; 如果按鍵被判定為正在按下-
Return ; 則拒絕繼續(xù)執(zhí)行;
示例按鍵_已釋放 := 0 ; 否則繼續(xù)執(zhí)行并將按鍵標記為已按下.
SetTimer, 示例標簽_示例按鍵_按鍵狀態(tài), 50 ; 創(chuàng)建或重設計時器, 以50次/秒的速率檢查按鍵狀態(tài).
示例標簽_主邏輯: ; 標簽: 主要邏輯, 隨入口自然執(zhí)行.
SetTimer, 示例標簽_主邏輯, %示例按鍵_間隔% ; 創(chuàng)建或重設計時器, 以指定間隔重復此標簽.
Send, {h} ; 發(fā)送按鍵.
Return ; 自然停止.
示例標簽_示例按鍵_按鍵狀態(tài): ; 標簽, 檢查按鍵狀態(tài).
If !GetKeyState(示例按鍵, "P") { ; 如果按鍵不再被按下,
SetTimer, 示例標簽_示例按鍵_按鍵狀態(tài), Off ; 關閉此計時器-
SetTimer, 示例標簽_主邏輯, Off ; 和主邏輯計時器,
示例按鍵_已釋放 := 1 ; 并將按鍵標記為已抬起.
}
Return ; END FUNC : 示例標簽 /
腳本通過計時器獲取按鍵狀態(tài)并以此拒絕冗余按鍵;至此,腳本已按預期執(zhí)行。