我輸入以下 3 種語言:
語言 A - 55% 的時間
語言 B - 40% 的時間
C 語言 - 5% 的時間
通常的解決方案是安裝所有三種語言並使用 Ctrl/Alt-Shift,但每次在 A 和 B 之間來回切換時都必須切換語言 C,這非常煩人。
是否有某種解決方案可以讓我在按下 Ctrl/Alt-Shift 時阻止 Windows 切換到 C 語言?然後我可以添加一個單獨的熱鍵來切換到 C 語言。
我使用的是 Windows 7 SP1。
謝謝。
答案1
您可以建立自動切換鍵盤語言時「跳過」語言「C」的腳本。
安裝後自動和編輯。右鍵點選桌面->新建->自動腳本。右鍵單擊這個已建立的文件 - >編輯。現在您應該會看到 ScITE 窗口,並在“在此處添加您的程式碼”行之後添加以下程式碼:
#include <WinAPISys.au3>
ClipPut(_WinAPI_GetKeyboardLayout(ControlGetHandle("[ACTIVE]","","")))
按SHIFT+ALT(或註冊用於切換鍵盤語言的熱鍵)直到目前語言為「C」(如果工作列中沒有顯示鍵盤語言名稱,請按Win+R ->> CTFMON.EXE ->> Enter) ,然後在 ScITE 視窗中按下「工具」->「執行」。現在在您的剪貼簿中語言“C”代碼。貼上(CTRL+V)並將其保存在某處。
刪除先前的程式碼並貼上以下內容:
#include <WindowsConstants.au3> #include <WinAPISys.au3> #include <字串.au3> #無托盤圖標 $skiplang=”0x04090409" ;切換語言時跳過該語言 $list=_WinAPI_GetKeyboardLayoutList ( ) $fakeforwardlang="" 如果 IsArray($list) 那麼 如果 $list[0]<3 則退出;你個土豆 對於 $i = 1 到 $list[0] if $list[$i]=$skiplang 然後;找下一個語言 如果 $i=$list[0] 那麼 $fakeforwardlang=$列表[1] 退出循環 萬一 $fakeforwardlang=$list[$i+1] 退出循環 萬一 下一個 別的 出口 萬一 $fakeforwardlang=StringMid($fakeforwardlang,1,6) 而 1 $handle=ControlGetHandle("[ACTIVE]","","") 如果 getcurkb($handle)=$skiplang 那麼 _WinAPI_SetKeyboardLayout($handle, $fakeforwardlang) 睡眠(100) 文德 Func getcurkb($handle) 返回 _WinAPI_GetKeyboardLayout($handle) 結束函數
下一步需要將已儲存的語言「C」代碼替換為0x04090409在此腳本中(5 行)。
然後在 SciTE 視窗中按 Tools->Build。現在您將在 Autoit 腳本所在的相同目錄中取得可執行檔。運行此可執行檔(.exe)。
如果想要停止腳本,則需要使用工作管理員來終止進程。
適用於具有 3 種鍵盤語言並停用 UAC 的 Windows 7。
更新:
我搞砸了。 _WinAPI_SetKeyboardLayout 僅有時會轉送工作。當按下 {down} 鍵時,標準發送非常錯誤。目前的解決方案基於外部函數。但此功能有一個問題,您需要放開 Shift 和 Alt 才能切換到下一種鍵盤語言。稍後應該重新檢查代碼。
更新2:
回到 _WinAPI_SetKeyboardLayout 但使用假轉送。我現在找不到任何問題。
答案2
我有同樣的情況,並為每種語言設定不同的熱鍵,例如:
- Ctrl+ Shift+1對於語言 A,
- Ctrl+ Shift+2對於語言 B,
- Ctrl+ Shift+3用於 C 語言
只需按一下鍵即可切換到所需的語言。這可以在控制台\所有控制台項目\語言\進階設定\更改語言欄熱鍵中設定(這是Windows 10中的路徑,在Windows 7上可能有所不同,但有些地方相似)。該對話框如下所示:更改按鍵順序