Schließen Sie unter Windows 10 eine Eingabesprache aus dem Umschaltzyklus "Alt + Umschalt" aus

3

Ich habe 3 Sprachen auf meinem System: Englisch, Russisch und Japanisch. Aber ich möchte nur Alt + Shift zwischen Englisch und Russisch können. Gibt es eine Möglichkeit, dies in W10 zu tun?

Diese Frage trifft hier nicht zu, da sie auf W10 nicht funktioniert.

Liburia
quelle
Können Sie erklären, warum das Ausschließen einer Eingabesprache von Alt + Umschalt / Strg + Umschalt-Schaltzyklus unter Windows hier nicht zutrifft? Es sieht aus wie ein genaues Duplikat.
Scott
@Scott Es ist für Windows 7, ich kann keine Möglichkeit finden, die Antworten auf W10 von dieser Frage zu replizieren.
Liburia
1
OK,  bearbeiten Sie Ihre Frage, um dies zu erklären.
Scott

Antworten:

1

Befolgen Sie diese Schritte:

  1. Installieren Sie AutoHotkey .
  2. Erstellen Sie eine Textdatei und fügen Sie den folgenden Text ein:
; This scripts changes the functionality of Shift + Alt from "switch keyboard layout"
; to "change to previous layout".
; this is usefull when you have more than 2 keyboard layouts and want to switch between 
; only 2 of them.

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

LAlt & LShift::send, #^{space down}{space up}
  1. Speichern Sie die Datei mit der Erweiterung .ahk und benennen Sie sie um (z. B. "Zusätzliche Tastaturlayouts ausschließen .ahk").
  2. Doppelklicken Sie, um das Skript auszuführen. Jetzt sollte Alt + Umschalt nur zwischen den ersten beiden Tastaturlayouts wechseln.

Wenn Sie zufrieden sind, können Sie das Skript kompilieren (Rechtsklick -> Kompilieren), um die EXE- Datei zu erstellen . bewegen Sie dann die EXE oder .ahk Datei in den Autostart - Ordner (geöffnet RUN und geben Sie „ shell: startup “ ohne Anführungszeichen).

Zusätzliche Hinweise:

  • Wenn Sie die EXE- Datei kopieren, benötigen Sie keinen AutoHotkey mehr, um sie deinstallieren zu können.
  • Wenn Sie die .ahk- Skriptdatei kopieren, dürfen Sie AutoHotkey nicht deinstallieren.
  • Dieser Beitrag löst ein ähnliches Problem und hat zu der Idee beigetragen.
Ewindar
quelle
0

Ich schlage vor, mit der gleichen Autohotkey-Lösung wahrscheinlich etwas besser vorzugehen.

Anstatt zum vorherigen Layout zu wechseln (welches das dritte sein könnte), deaktivieren Sie besser die native Tastenkombination Alt + Umschalt, um das Layout zu wechseln.

Beispiel deaktivieren

Verwenden Sie das folgende Skript, möglicherweise mit den gewünschten Anpassungen:

#SingleInstance force
SendMode Input

; Cycled list of language ids
; refer to https://docs.microsoft.com/en-us/windows/win32/intl/language-identifiers
; and https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings
; for finding out correct values
; in this case 0x409 means standard US English, and 0x419 means standard Russian
AltShiftLangs := [0x0409, 0x0419]

; 0x411 means japanese IME
CtrlAltLang := 0x0411

; This returns currently active language id
GetKeyboardLayout() {
  WinGet, WinID,, A
  ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
  return DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt") & 0xFFFF
}

; This sends request to change system language to lang argument
SetKeyboardLayout(lang) {
  PostMessage, 0x50,, lang,, A
}

; This returns 0-based index of Value in Arr
IndexOf(Arr, Value) {
  Loop % Arr.Length()
    if Arr[A_Index] == Value {
      return A_Index-1
    }
  return -1
}

; This sets language based on current system lanuage and next value by index in Arr
; If current language is not found, it sets system to first language from Arr
SetNextLanguage(Arr) {
  lang := GetKeyboardLayout()
  idx := IndexOf(Arr, lang)
  if (idx < 0) {
    SetKeyboardLayout(Arr[1])
    return
  }
  nextIdx := mod(idx+1, Arr.Length())
  next := Arr[nextIdx+1]
  SetKeyboardLayout(next)
}

; Alt+Shift hotkey - cycle between AltShiftLangs
LAlt & LShift::
SetNextLanguage(AltShiftLangs)
return

; Ctrl+Alt hotkey - switch directly to isolated CtrlAltLang
LCtrl & LAlt::
SetKeyboardLayout(CtrlAltLang)
return
Alexander Tumin
quelle