Tastaturlayout umschalten
Ich habe heute fast fünf Stunden damit verbracht, an mir zu zweifeln.
Die Aufgabe war einfach:
Das Tastaturlayout programmatisch für den laufenden Prozess umschalten (deutsch/englisch).
Microsoft hat da auch eine einfache Funktion: LoadKeyboardLayout().
Die macht das alles. Ja, ja! …unter Windows XP! Ohne Mucken.
Aber Windows 98 zickte. Die Funktion gab keinen Fehler zurück. Das Tastaturlayout wurde geladen, aber nicht aktiviert.
Auch ein nachgeschaltetes ActivateKeyboardLayout() oder SystemParametersInfo(SPI_SETDEFAULTINPUTLANG,…) brachten nichts. Die Funktionen gaben FALSE zurück und GetLastError() meldete „0: Der Vorgang wurde erfolgreich beendet“. 👿
Während des Probierens funktionierte es dann…
Einfach so! Mit demselben Quelltext! 😯
Der einzige Unterschied: Das Programm, bei dem es geht, hatte schon ein Fenster erstellt.
Also fehlt etwas in der Dokumentation von Microsoft:
Benutzt ein Thread unter Windows 98 (und werweisswonochüberall!) LoadKeyboardLayout oder ActivateKeyboardLayout, funktioniert das nur, wenn der Thread bereits ein Fenster erstellt hat.