Sprachwechsel für bestimmte Anwendungen verbieten

876
Vasyl Boroviak

Ich habe ein Problem mit dem versehentlichen Umschalten der Eingabesprache. Ich habe viele verschiedene Einstellungen ausprobiert, um es nicht zu tun - Hotkey ändern, Software installieren (Key Switcher, Keyboard Ninja, Punto Switcher) ... Aber nichts half.

Ich habe einen bestimmten Hotkey verwendet (Strg + Umschalttaste). Jeder andere Hotkey lässt mich noch mehr leiden. Die Software, die ich gefunden habe, hat keine Funktion, um versehentliches Umschalten zu vermeiden.

Was ich möchte, ist, eine Software zu finden, die die Eingabesprache "English US" an mein "Visual Studio" anhängen kann. Das Drücken von Strg + Umschalttaste innerhalb von VS sollte nicht zu einer Sprachumschaltung führen. Hast du Ideen?

4
Welche Version von Windows und welche Version von Visual Studio? Auch 32 oder 64-Bit? Hugh Allen vor 13 Jahren 0
Ich arbeite mit Windows 7 und VS2008 (bald wird auf VS2010 umgestellt). Alle 64bit. Vasyl Boroviak vor 13 Jahren 0
Hast du dieses Problem gelöst? Ich habe das gleiche Problem ... alexeit vor 12 Jahren 0
Nein, habe ich nicht. Vasyl Boroviak vor 12 Jahren 0
Es ist 2014, da draußen Flugroboter sind, aber wir können es immer noch nicht lösen. noch keine lösung? vorou vor 9 Jahren 0

3 Antworten auf die Frage

1
harrymc

Wenn Sie zu gehen, werden
Control Panel / Regional and Language Options / Languages / Details / Key Settings
Sie feststellen, dass Sie Hotkeys für Sprachänderungen definieren können.

Sie können dies mit einer Makrosprache wie AutoHotkey koppeln, um ein Makro zu definieren, das die Sprache / das Tastaturlayout ändert und anschließend Visual Studio startet. Dies wird jedoch zukünftige Sprachänderungen nicht blockieren.

Wenn Sie nach etwas viel Strengeren suchen, gibt es meines Wissens kein solches Programm. Da VS erweiterbar ist, können Sie selbst ein Add-In programmieren, das die Anzahl der für VS zulässigen Sprachen begrenzt. Dieses kleine Add-In wird mit VS geladen und die bevorzugten Sprachen werden auf nur eine (Englisch) festgelegt.

Wenn Sie sich in diese Richtung begeben möchten, können die folgenden Links für den Anfang hilfreich sein:

Unterstützung für anwendungsspezifische Spracheinstellungen
Lernprogramm: Erstellen von Visual Studio-Add-Ins
Erstellen von Visual Studio-Add-Ins

Ja. Entfernen Sie alle Hotkeys für die Sprachumschaltung, und belassen Sie nur die Anzeigen in der Taskleiste. Auf diese Weise können Sie nicht versehentlich wechseln. Loren Pechtel vor 13 Jahren 0
0
Daisetsu

As long as your default language is already set and you only need to change the language for one program I would suggest changing the language for that program (VS) and then going into the Language Options and changing the hotkey to none, and then go to the key sequence and uncheck that box (Regional and language options -> Languages tab -> details -> Key Settings -> Change Key Sequence). Now the shortcuts will be off, and since Windows remembers inputs on a per application basis the input will automatically switch for VS but remain Spanish for everything else.

Nee. Dies ist nicht die Lösung. Die Sache ist, dass ich beide Sprachen in allen anderen Anwendungen verwenden muss (wie Browser, Mail-Client oder Skype). Vasyl Boroviak vor 13 Jahren 0
0
Hugh Allen

The following works in Visual Studio .NET 2003 on WinXP 32-bit. YMMV.

  • File -> New Project
  • select Project Type: Other Projects \ Extensibility Projects
  • select template: Visual Studio .NET Add-in. Click OK.
  • click Next, select Create an Add-in using Visual C++ / ATL, click Next.
  • select all possible appication hosts, click Next.
  • (optionally) enter a name and description, click Next.
  • choose Options. Don't check "yes, create a Tools menu item". Click Next.
  • don't choose to create an About box. Click Next.
  • click Finish.
  • switch to the tab with the source file Connect.cpp
  • at the top, after the #includes add the line

    HHOOK myhook; 
  • to method CConnect::OnConnection add the line

    myhook=SetWindowsHookEx(WH_GETMESSAGE, &myGetMsgProc, _AtlModule.GetResourceInstance(), GetCurrentThreadId()); 
  • to method CConnect::OnDisconnection add the line

    UnhookWindowsHookEx(myhook); 
  • above OnConnection() add the function

    LRESULT CALLBACK myGetMsgProc(int code, WPARAM wParam, LPARAM lParam) { MSG *msg = (MSG*)lParam; if (code>=0 && msg->message==WM_INPUTLANGCHANGEREQUEST) msg->message = WM_NULL; return CallNextHookEx(myhook, code, wParam, lParam); } 
  • build the solution.
  • select menu Tools -> Add-in Manager...
  • check the box for your new add-in. Don't check "Startup" for now in case anything went wrong - you don't want Visual Studio crashing every time it starts!
  • click OK.

It is now impossible to change language or keyboard layout in Visual Studio. The language bar gets a little confused if you try, but doesn't break.

Ich habe alle Schritte gemacht. Alles lief gut. Außer dass die Sprachumschaltung immer noch geschieht. :( Vasyl Boroviak vor 13 Jahren 0
Verdammt. In meinem Code wird davon ausgegangen, dass der Thread, der das Add-In lädt, der Thread ist, der die GUI hostet, was in Ihrer Version von VS möglicherweise nicht zutreffend ist. Könnten Sie herausfinden, ob dies das Problem ist? Eine Möglichkeit besteht darin, einen MessageBox () - Aufruf in OnConnection einzufügen, um die aktuelle Thread-ID anzuzeigen, und mithilfe von Spy ++ im Code-Editor-Fenster seine Thread-ID zu finden. Hugh Allen vor 13 Jahren 0
Ich hatte gerade einen anderen Gedanken - haben Sie nach dem Sprachwechsel tatsächlich versucht zu tippen, oder haben Sie einfach geglaubt, was Ihnen die Sprachleiste gesagt hat? Hugh Allen vor 13 Jahren 0
Ich habe natürlich getippt. :) Und den VS gerade für den Fall neu gestartet. Ich werde die Thread-Idee in zwei Tagen ausprobieren. Vielen Dank. Vasyl Boroviak vor 13 Jahren 0
@Vasiliy Borovyak: "Probiere die Thread-Idee in zwei Tagen" ... aber das Kopfgeld endet in 2 Tagen :( Hugh Allen vor 13 Jahren 0
@Vasiliy Borovyak: Wenn Sie hoffen, Ihre 100 Wiederholungspunkte zurückzuholen, indem Sie die Prämie nicht vergeben, funktioniert das nicht. Lesen Sie die FAQ. Sie werden auch die Fähigkeit verlieren, eine Antwort auf diese Frage zu akzeptieren. Hugh Allen vor 13 Jahren 0
Ich brauche keine Punkte. :) Ich brauche die Funktion in meinem VS! Und mach dir keine Sorgen. Es ist genug Zeit, um zu versuchen und dir die Prämie zu geben. :) Vasyl Boroviak vor 13 Jahren 0
MessageBox erfordert einige Parameter. Ich weiß nicht, was ich dort schreiben soll. Was muss ich auch einbeziehen, um eine Thread-ID zu erhalten? Bitte geben Sie den Code an, um diese Sache zu erledigen. Vasyl Boroviak vor 13 Jahren 0
Falscher Alarm! Ich habe den ganzen Code gegoogelt, den ich brauche. Das Ergebnis ist folgendes. MessageBox zeigt "Thread ID: 2724". Die devenv.exe-PID ist dieselbe "2724". :( Auch mein VS2008 ist verrückt geworden! Das Meldungsfeld wird in einer Endlosschleife angezeigt. Die OnConnection ist wahrscheinlich nicht der beste Ort, um Meldungsfelder anzuzeigen. Vasyl Boroviak vor 13 Jahren 0
@Vasiliy Borovyak: "Die OnConnection ist wahrscheinlich nicht der beste Ort, um Meldungsfelder anzuzeigen". Genau. Sie sollten OutputDebugString () wirklich verwenden, aber um seine Ausgabe anzuzeigen, benötigen Sie entweder einen an VS angeschlossenen Debugger (z. B. eine zweite Instanz von VS) oder verwenden Sie die DebugView von Sysinternals: http://technet.microsoft.com /en-us/sysinternals/bb896647.aspx Hugh Allen vor 13 Jahren 0
@Vasiliy Borovyak: "Thread ID: 2724. Die devenv.exe-PID ist die gleiche 2724" Das scheint viel zu viel Zufall zu sein. Sind Sie sicher, dass TID == PID ist? Und haben Sie Spy ++ verwendet, um die TID herauszufinden, die das Haupteditorfenster besitzt? (Hinweis: Die TIDs und PIDs von VS sind bei jedem Start unterschiedlich. Ich möchte nur wissen, ob die TID, die OnConnection aufruft, die GUI ist.) Hugh Allen vor 13 Jahren 0
Du hast Recht. Ich habe die Funktion 'getpid ()' verwendet. Also habe ich geändert, um das GetCurrentThreadId () aufzurufen, und es zeigt 2200 an. Die Verwendung von Spy ++ für den Editor zeigte 0x898 (was gleich 2200 ist). Der Thread ist also derselbe. Vasyl Boroviak vor 13 Jahren 0
@Vasiliy Borovyak: In diesem Fall weiß ich nicht, warum es für dich nicht funktioniert. Ich kann es nicht selbst testen / debuggen, da ich VS2003 unter XP 32-Bit habe und es für mich funktioniert. Möglicherweise können Sie stattdessen eine Möglichkeit finden, msctf.dll (die den Hotkey implementiert) aus dem VS-Prozess zu entfernen. Vielleicht versuchen Sie die Alpha-64-Bit-Version von Unlocker: http://ccollomb.free.fr/unlocker/ Hugh Allen vor 13 Jahren 0
Eine .dll von VS entladen? Scheint verrückt zu sein. :) Ich mache das nicht, weil es viel zu kompliziert ist. Danke trotzdem. Vasyl Boroviak vor 13 Jahren 0
@ Vasiliy Borovyak: Richtig. Das Entladen der DLL stürzt nur VS ab :) Sie könnten versuchen, SetProcessPreferredUILanguages ​​aufzurufen, aber es sieht so aus, als wäre es für GUI-Sprachen nicht Eingabesprachen. Ich kann auch nicht den Code für Sie schreiben, da ich kein Win7 habe. Dokumente unter http://msdn.microsoft.com/de-de/library/dd374050%28v=VS.85%29.aspx Hugh Allen vor 13 Jahren 0