2015-09-06 61 views
0

這裏去我的腳本的一部分:Autohotkey佈局獨立「輸入」。等待任何密鑰。 「輸入」替代

~LWin Up:: 
    Input, key, L1 
    if (key = "n") { 
    Run, Notepad.exe 
    } 
    else if (key = "s") { 
    Run, cmd.exe 
    }  
return 

釋放倫等待被按下另一個鍵後,然後運行對應的關鍵應用。問題是如果我切換到俄語版式的'轉向'ы'並且腳本不起作用。

如何讓它獨立佈局?複製'ы'的代碼不是選項。

的解決方案可能是這樣的:

#n:: 
#s:: 
    stringsplit, splitted_, A_ThisHotkey 
    key := splitted_2 
    if (key = "n") { 
    Run, Notepad.exe 
    } 
    else if (key = "s") { 
    Run, cmd.exe 
    } 
    Send {LWin up} ; release LWin 
return 

~LWin Up:: 
    stringsplit, splitted_, A_PriorHotkey 
    if (splitted_1 = "#") { ; if win+key combo has just been released 
    return    ; no need to keep LWin down 
    } 
    Send {LWin down}  ; else keep it down 
return 

我已經試過了,但它不能正常工作。有時它不會釋放LWin,有時它不會保持按下。此外,這種方法還有其他缺點,所以我不想使用它。

回答

1

您的第一個腳本似乎適用於最新的Unicode版本的AutoHotkey。獲取最新版本@ ahkscript.org

添加了對下面的代碼 「ы」 的檢查:

~LWin Up:: 
    Input, key, L1 
    if (key = "n" or key = "ы") { 
    Run, Notepad.exe 
    } 
    else if (key = "s") { 
    Run, cmd.exe 
    }  
return 

確保與腳本UTF-8編碼的(不是UTF-8無BOM)

編輯:

好吧我想我找到了一個答案,不需要你添加「ы」,而是依賴於由鍵盤產生的SC代碼,這意味着它的佈局無關。

Relevant info from Input command from the Docs:

E [v1.1.20 +]:由字符代碼 ,而不是由鍵碼處理單字符結束鍵。如果 活動窗口的鍵盤佈局與腳本的鍵盤 佈局不同,則會提供更一致的結果。它還可以防止輸入結束字符時實際不產生 的組合鍵;例如,如果@是一個 結束鍵,則在US版式上Shift + 2將觸發它,但Ctrl + Shift + 2 不會(如果使用E選項)。如果還使用C選項,則 結尾字符區分大小寫。

EndKeys一個零個或多個鍵的列表,其中任何一個鍵在按下時終止 輸入(EndKey本身不寫入OutputVar)。 以這種方式終止輸入時,ErrorLevel設置爲單詞 EndKey,後跟冒號和EndKey的名稱。示例: EndKey:。,EndKey:Escape。

EndKey列表使用類似於發送命令的格式。例如,對於 示例,指定{Enter}。{Esc}將導致輸入,期間 (。)或ESCAPE終止輸入。要將大括號本身用作 結束鍵,請指定{{}和/或{}}。

要使用Ctrl,Alt或Shift作爲結束鍵,請指定左側和/或右側版本的密鑰,而不是中性版本。例如, 指定{LControl} {RControl}而不是{Control}。

雖然修改後的密鑰,如控制-C(^ C),不支持需要shift鍵, 某些字符被壓得 - 即標點符號如:@ & {} - 是誰?!支持v1.0.14 +。 上述E選項支持其他字符, v1.1.20 +。

也可以指定明確的虛擬鍵碼,例如{vkFF}。 這在少數情況下非常有用,其中一個鍵沒有名字,並且在按下時產生不可見的字符 。其虛擬鍵碼可以是 ,通過按鍵列表頁面底部的步驟確定。

~LWin Up:: 
    Input, key, L1 E, {SC031}.{SC01F} ; {n}.{s} 
    if (Errorlevel = "EndKey:SC031") { 
    Run, Notepad.exe 
    } 
    If (Errorlevel = "EndKey:SC01f") { 
    Run, cmd.exe 
    } 
return 

另外,我是無法重現,其中Windows鍵被按下的問題嗎?