如何從語言切換熱鍵中刪除很少使用的語言?

如何從語言切換熱鍵中刪除很少使用的語言?

我輸入以下 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上可能有所不同,但有些地方相似)。該對話框如下所示:更改按鍵順序

相關內容