hallo leute,
wie kann ich unter Windows feststellen, welche Tastaturlayout gerade im System bzw. im Programmfenster verwendet wird?
Den Tastaturlayout sieht man ja in der Regel auf der Taskleiste rechts in Form von DE. Klickt man darauf, so kann man ja ein anderes Layout wählen.
Das ganze setzt natürlich vorraus, das man mehrere Tastaturlayouts eingerichtet hat.
mfg
kurt
KeyMap unter Windows
Re: KeyMap unter Windows
GetKeyboardLayout_(0)
Der Parameter 0 besagt, dass es sich um den aufrufenden Thread handelt. Ist aber etwas tricky, da z.B. der Rückgabewert das Hardware Layout UND das "Software" Layout beinhaltet. Bin mir auch nicht ganz sicher, ob nur das unter Windows als Standard definierte Layout rückgegeben wird.
MSDN-Doku findest Du hier
(sollte es an englisch Kentnissen fehlen, einfach nochmal fragen)
Der Parameter 0 besagt, dass es sich um den aufrufenden Thread handelt. Ist aber etwas tricky, da z.B. der Rückgabewert das Hardware Layout UND das "Software" Layout beinhaltet. Bin mir auch nicht ganz sicher, ob nur das unter Windows als Standard definierte Layout rückgegeben wird.
MSDN-Doku findest Du hier
(sollte es an englisch Kentnissen fehlen, einfach nochmal fragen)
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
-
- Beiträge: 173
- Registriert: 30.11.2010 02:34
Re: KeyMap unter Windows
Es liefert nur eine Zahl.
Wie ermittle ich nun daraus den Layout-Name wie DE, EN etc...
Wie ermittle ich nun daraus den Layout-Name wie DE, EN etc...
Re: KeyMap unter Windows
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Language Identifiers
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Language Identifiers
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: KeyMap unter Windows
Code: Alles auswählen
Define Keyboard.s = Space(8)
GetKeyboardLayoutName_(Keyboard)
Debug Keyboard
Mist, zu langsam

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 173
- Registriert: 30.11.2010 02:34
Re: KeyMap unter Windows
ich habe jetzt eine weile rumgegoogelt, habe auch die microsoft links abgecheckt, bin aber nicht auf eine lösung gekommen, das meiner vorstellung entspricht.
in ordnung GetKeyboardLayout liefert mir die LanguageID, nun gut. aber wie erreiche ich mit dieser id letztendlich das was ich möchte?
ich weiß nicht so recht wie ich die sache mit dem ersten wort-teil und zweiten wort-teil wie bei dem ms-doku angesprochen an das kommen soll wie ich es will. habe kein nützliches beispiel gefunden. ich erhalte nur nummern.
GetKayboaryLayoutName liefert bei mir ebenfalls eine nummer als string zurück.
in endeffekt möchte ich eigentlich nur wissen, welche tastatur-layout der anwender in dem moment, an dem er in meinem programm tippt, verwendet. ich brauche ein system.
sowas wie en-US und de-DE_poolbook kann nicht gebrauchen. ich brauche schlicht weg einfach nur zum beispiel "en" für englisch, "de" für deutsch. Gut ich gehe mal davon aus das die erweiterung -US bzw DE_poolbook die art der tastatur wiedergeben, zb ob es sich um eine querty/z bzw. F-Tastatur oder was auch immer handelt.
hier unter http://msdn.microsoft.com/en-us/library ... 85%29.aspx wird zwar eine dicke tabelle presentiert. aber ich kann damit nicht viel anfangen.
muss ich jetzt den erhaltenen lang-id in zwei longs zerteilen? dann die werte in hex umwandelt und mir eine dicke select-statement basteln, damit ich rausbekomme, was gerade sache ist?
wenn ja, bräuchte ich einen beispiel in pb wie man das macht.
eigentlich wollte ich auf diese weise direkt zum keymap zurgreifen. das heißt eine art tastatur-array wie bei mac. damit ich weiß welche taste was representiert. bei windows ändern sich manche tastaturnummern beim ändern des keyboardlayouts mit. auf die weise jetzt eine eigene keymap-array für jede erdenkliche tastatur zu basteln scheint etwas zu weit hergeholt. es muss doch dafür eine einfachere lösung geben oder?
mfg
kurt
in ordnung GetKeyboardLayout liefert mir die LanguageID, nun gut. aber wie erreiche ich mit dieser id letztendlich das was ich möchte?
ich weiß nicht so recht wie ich die sache mit dem ersten wort-teil und zweiten wort-teil wie bei dem ms-doku angesprochen an das kommen soll wie ich es will. habe kein nützliches beispiel gefunden. ich erhalte nur nummern.
GetKayboaryLayoutName liefert bei mir ebenfalls eine nummer als string zurück.
in endeffekt möchte ich eigentlich nur wissen, welche tastatur-layout der anwender in dem moment, an dem er in meinem programm tippt, verwendet. ich brauche ein system.
sowas wie en-US und de-DE_poolbook kann nicht gebrauchen. ich brauche schlicht weg einfach nur zum beispiel "en" für englisch, "de" für deutsch. Gut ich gehe mal davon aus das die erweiterung -US bzw DE_poolbook die art der tastatur wiedergeben, zb ob es sich um eine querty/z bzw. F-Tastatur oder was auch immer handelt.
hier unter http://msdn.microsoft.com/en-us/library ... 85%29.aspx wird zwar eine dicke tabelle presentiert. aber ich kann damit nicht viel anfangen.
muss ich jetzt den erhaltenen lang-id in zwei longs zerteilen? dann die werte in hex umwandelt und mir eine dicke select-statement basteln, damit ich rausbekomme, was gerade sache ist?
wenn ja, bräuchte ich einen beispiel in pb wie man das macht.
eigentlich wollte ich auf diese weise direkt zum keymap zurgreifen. das heißt eine art tastatur-array wie bei mac. damit ich weiß welche taste was representiert. bei windows ändern sich manche tastaturnummern beim ändern des keyboardlayouts mit. auf die weise jetzt eine eigene keymap-array für jede erdenkliche tastatur zu basteln scheint etwas zu weit hergeholt. es muss doch dafür eine einfachere lösung geben oder?
mfg
kurt
Re: KeyMap unter Windows
Fast korrekt. Musst "in zwei Bytes zerteilen". (Quelle: MSDN)delikanli_19_82 hat geschrieben:muss ich jetzt den erhaltenen lang-id in zwei longs zerteilen? dann die werte in hex umwandelt und mir eine dicke select-statement basteln, damit ich rausbekomme, was gerade sache ist?
Code: Alles auswählen
+-------------------------+-------------------------+
| SubLanguage ID | Primary Language ID |
+-------------------------+-------------------------+
15 10 9 0 bit
Meinst Du sowas?delikanli_19_82 hat geschrieben:wenn ja, bräuchte ich einen beispiel in pb wie man das macht.
Code: Alles auswählen
Structure WordBytes
StructureUnion
w.w
b.b[2]
EndStructureUnion
EndStructure
Define n.WordBytes
n\w = $2211
Debug Hex(n\w)
Debug Hex(n\b[0])
Debug Hex(n\b[1])
Eine einfache Lösung wäre 'ne super Sache! Würde mich auch interessieren! Mit MapVirtualKeyEx_() und GetKeyNameText_() kann man (je nachdem was man will) einiges Basteln. Allerdings wird's bei MapVirtualKeyEx_() mit Tastenkombinationen blöd und bei GetKeyNameText_() ist die "Qualität des Strings" mies (beim Zahlenblock-Div kommt da z.B. "(Zahlenblock)" raus).delikanli_19_82 hat geschrieben:eigentlich wollte ich auf diese weise direkt zum keymap zurgreifen. das heißt eine art tastatur-array wie bei mac. damit ich weiß welche taste was representiert. bei windows ändern sich manche tastaturnummern beim ändern des keyboardlayouts mit. auf die weise jetzt eine eigene keymap-array für jede erdenkliche tastatur zu basteln scheint etwas zu weit hergeholt. es muss doch dafür eine einfachere lösung geben oder?
Ein Beispiel-Code gibt's hier, wobei das mehr für Debug-Zwecke und nicht direkt übernehmbar ist.
Falls Du aus der Identifier-Tabelle was bastelst würde ich lieb um den Code bitten (mit ganz viel Zucker oben drauf

PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)