我想創建一個熱鍵,它發送一些密鑰,然後爲另一個熱鍵發送密鑰,然後發送第三個密鑰。Autohotkey發送密鑰,讓它觸發其他熱鍵(#InputLevel混淆)
這似乎是可能的,使用#InputLevel
:
#InputLevel 1
a::b
#InputLevel 0
b::c
如預期上述工程:通過按一個我得到Ç。
但是,我不僅要重新映射第一個密鑰:我想在發送密鑰之前做更多。所以,我想我可能只是重寫一點點上面:
#InputLevel 1
Hotkey *a, foo
#InputLevel 0
b::c
foo:
; Do something more here …
SendInput {Blind}b
return
以上按預期但不工作:通過按一個我得到b(不Ç)。
更新:@Robert Ilbrink提醒我,你可以執行多個命令,而無需使用Hotkey
命令:
#InputLevel 1
*a::
; Do something here …
SendEvent {Blind}b
return
#InputLevel 0
b::c
上面確實給預期的效果:按一個導致Ç 。但是,我必須重新解釋我的問題。我想問題是:我需要動態設置熱鍵,這意味着我必須使用帶有標籤的Hotkey
命令(據我所知)。 (另請注意,我用SendEvent
使用上面SendInput
產生b奇數。)
(更新完)
我知道有一個伴侶命令#InputLevel
- SendLevel
哪位可能有關。我試過把它放在很多地方,但它從來沒有任何區別。
所以,這是一個簡化的理論例子。將a重新映射到b當然是無用的(當然,最終的結果可以通過a::c
來實現)。關於我的用例。請記住,如果事實證明「真實」解決方案意味着正在嘗試以其他方式進行,我仍然有興趣瞭解有關#InputLevel
和SendLevel
的更多信息,以及爲什麼我的示例無法按預期工作。
我正在執行dual-role modifier keys。例如,發送)按單獨RSHIFT的時候,但RSHIFT + 關鍵時與其他一些關鍵的擠壓在一起。基本上,RShift在keydown和RShift up和) on keyup。但是,這有一個缺陷:即使將RShift與其他一些密鑰)仍然發送。所以腳本需要知道何時有組合。我的解決辦法是熱鍵添加到所有字母鍵,方向鍵和其他一些按鍵,像這樣:
for comboKey in filteredComboKeys {
Hotkey % "*" comboKey, Dual_comboKey
}
; Later in script:
Dual_comboKey:
; The following function lets the dual-role modifier keys know that they have
; been combined with another key (and a few other things, which I don't think
; are important for the issue.)
Dual.combo() ;
key := Dual.cleanKey(A_ThisHotkey)
SendInput {Blind}%key%
return
上述解決方案都非常好,我的目的,不同之處在於打破了所有的重新映射和其它熱鍵用戶可能會造成:這些根本不會發生。
啊,我怎麼能忘記有關語法?這確實讓我做了更多的事情,而不僅僅是重映射。 (有趣的是,'SendInput'不起作用。)但是,我必須使用'Hotkey'命令,因爲「comboKeys」是動態的 - 它們甚至可以由用戶設置爲支持除a-z之外的其他字符。 – lydell
我已經更新了現在的問題。感謝和+1解決了簡化示例中的第一個問題(能夠進行多次重新映射)。 – lydell