| |
|
|
- page 1 - |
|
Stephan Sonneborn |
allô zusammen,
je voudrais per Profan cela Tastaturlayout sur Englisch ajuster. normalement fais je cela so:
mais cela führt trop einer Zugriffsverletzung dans USER32.DLL.
qui sais conseil?
(WIN10, 64Bit) |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 21.03.2022 ▲ |
|
|
|
|
« cette Beitrag wurde comme Solution gekennzeichnet. » |
|
Georg Teles | Guten soir,
ahem, qui Funktion LoadKeyboardLayout erwartet une Adresse zur LayoutID (Addr(TLayout#)) ... qui Funktion UnloadKeyboardLayout erwartet wiederrum cela Handle, welches de qui Funktion LoadKeyboardLayout generiert wurde.
Im Beispiel habe vite quelque chose gebastelt (aktuelles Layout wird ausgelesen, englische & après tschechische Tastaturlayout volonté hinzugefügt et anschließend entfernt & sur cela ursprüngliche Layout eingestellt):
DECLARE aktuelle$, TLayout$, TLayout#, hLayoutID_en&, hLayoutID_cs&
DIM TLayout#, 9'~KL_NAMELENGTH'9
DEF LoadKeyboardLayout(2)! "User32", "LoadKeyboardLayoutA"
DEF GetKeyboardLayoutName(1)! "User32","GetKeyboardLayoutNameA"
DEF UnloadKeyboardLayout(1)! "User32","UnloadKeyboardLayout"
cls
' aktuelle clavier
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "aktuelle clavier: "+String$(TLayout#,0)
imprimer
' aktuelle Sauver
aktuelle$ = String$(TLayout#,0)
WAITINPUT
' englische Tastaturlayout hinzufügen
TLayout$ = "00000409"
String TLayout#,0 = TLayout$
' englische Layout ID sichern !
hLayoutID_en& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimer "LayoutID_en: ";(hLayoutID_en&);" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "englische clavier: "+String$(TLayout#,0)
imprimer
WAITINPUT
' tschechische Tastaturlayout hinzufügen
TLayout$ = "00000405"
String TLayout#,0 = TLayout$
' tschechische Layout ID sichern !
hLayoutID_cs& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimer "LayoutID_cs: ";hLayoutID_cs&;" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "tschechische clavier: "+String$(TLayout#,0)
imprimer
WAITINPUT
' englische & tschechische Layout entfernen
imprimer UnloadKeyboardLayout(hLayoutID_en&);" (1 = Erfolg/EN-Layout entfernt)"
imprimer UnloadKeyboardLayout(hLayoutID_cs&);" (1 = Erfolg/CS-Layout entfernt)"
imprimer
' sur ursprüngliches Layout zurücksetzen
String TLayout#,0 = aktuelle$
' vorheriges Layout récente magasin !
imprimer LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "aktuelle clavier wiederhergestellt: "+String$(TLayout#,0)
'----------------------------------------------------
DISPOSE TLayout#
WAITINPUT
Edit: chez LoadKeyboardLayout(Addr(TLayout#), 1) peux qui String direct benutzt volonté: LoadKeyboardLayout(Addr(TLayout$), 1) wogegen qui Funktion GetKeyboardLayoutName(Addr(TLayout#)) une Bereich nécessaire.
Grüße Georg |
|
|
| |
|
|
|
|
Sven Bader | allô Stephan,
es du dir sûrement, dass ca dans Windows 10 überhaupt encore so simple allez? qui Systeme riegeln solche tiefen Eingriffe oui toujours plus ab.
avec meinen deux Schüssen ins Blaue suis je malheureusement gescheitert, 1. Fontname# großzügiger dimensionieren, 2. la première "0" effacer, qui faute venez quand même aussi chez mir.
j'ai folgendes sur Stackoverflow trouvé, ici wird aussi une zéro moins verwendet et es wird kommentiert, dass cela Keyboardlayout so lediglich bereitgestellt mais encore pas aktiviert wird et plan dans den Kommentaren qui le doute, dass es sous Windows 10 pas plus allez. [...] (Stackoverflow)
Grüße Sven |
|
|
| |
|
|
|
Stephan Sonneborn | allô Sven, vielen Dank pour Votre Tests. je hab inzwischen herausbekommen, dass qui Übergabe eines Stings, z.B. "00000407" pour DE ou bien "00000409" pour EN cela Tastaturlayout umstellt. je devrait maintenant seulement encore savons, comment cela aktuelle Taststurlayout est. alors cela, bevor je es umstelle. ensuite peux je es am Programmende wieder zurückstellen... |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 24.03.2022 ▲ |
|
|
|
|
Georg Teles | Guten soir,
ahem, qui Funktion LoadKeyboardLayout erwartet une Adresse zur LayoutID (Addr(TLayout#)) ... qui Funktion UnloadKeyboardLayout erwartet wiederrum cela Handle, welches de qui Funktion LoadKeyboardLayout generiert wurde.
Im Beispiel habe vite quelque chose gebastelt (aktuelles Layout wird ausgelesen, englische & après tschechische Tastaturlayout volonté hinzugefügt et anschließend entfernt & sur cela ursprüngliche Layout eingestellt):
DECLARE aktuelle$, TLayout$, TLayout#, hLayoutID_en&, hLayoutID_cs&
DIM TLayout#, 9'~KL_NAMELENGTH'9
DEF LoadKeyboardLayout(2)! "User32", "LoadKeyboardLayoutA"
DEF GetKeyboardLayoutName(1)! "User32","GetKeyboardLayoutNameA"
DEF UnloadKeyboardLayout(1)! "User32","UnloadKeyboardLayout"
cls
' aktuelle clavier
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "aktuelle clavier: "+String$(TLayout#,0)
imprimer
' aktuelle Sauver
aktuelle$ = String$(TLayout#,0)
WAITINPUT
' englische Tastaturlayout hinzufügen
TLayout$ = "00000409"
String TLayout#,0 = TLayout$
' englische Layout ID sichern !
hLayoutID_en& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimer "LayoutID_en: ";(hLayoutID_en&);" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "englische clavier: "+String$(TLayout#,0)
imprimer
WAITINPUT
' tschechische Tastaturlayout hinzufügen
TLayout$ = "00000405"
String TLayout#,0 = TLayout$
' tschechische Layout ID sichern !
hLayoutID_cs& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimer "LayoutID_cs: ";hLayoutID_cs&;" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "tschechische clavier: "+String$(TLayout#,0)
imprimer
WAITINPUT
' englische & tschechische Layout entfernen
imprimer UnloadKeyboardLayout(hLayoutID_en&);" (1 = Erfolg/EN-Layout entfernt)"
imprimer UnloadKeyboardLayout(hLayoutID_cs&);" (1 = Erfolg/CS-Layout entfernt)"
imprimer
' sur ursprüngliches Layout zurücksetzen
String TLayout#,0 = aktuelle$
' vorheriges Layout récente magasin !
imprimer LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
GetKeyboardLayoutName(Addr(TLayout#))
imprimer "aktuelle clavier wiederhergestellt: "+String$(TLayout#,0)
'----------------------------------------------------
DISPOSE TLayout#
WAITINPUT
Edit: chez LoadKeyboardLayout(Addr(TLayout#), 1) peux qui String direct benutzt volonté: LoadKeyboardLayout(Addr(TLayout$), 1) wogegen qui Funktion GetKeyboardLayoutName(Addr(TLayout#)) une Bereich nécessaire.
Grüße Georg |
|
|
| |
|
|
|
Georg Teles | Nabend nochmals,
qui zum Schluss auskommentierte la ligne zuvor muss doch rein:
' vorheriges Layout geladen: là cet bereits existiert hat, muss es pas absolument
' récente geladen volonté, nachfolgende la ligne peux ici vernachlässigt volonté!)
'imprimer LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
si on plusieurs Tastaturlayouts anfangs hat et cela Beispiel ausführt, wird cela erste Layout zum Schluss aus qui liste ausgewählt ... alors lieber bewusst cela vorherige Layout, quoi zuvor eingestellt était, magasin. (habe qui la ligne im vorherigen poste wieder kommentiert)
Edit: là fällt mir un, hatte la fois une PCU geschrieben, qui im Grunde qui liste qui Sprachen beinhaltet (Sprachwerte dans Dezimalangaben, cet doit encore dans Hexadezimale umgewandelt volonté siehe pour allemande 1031 = Hex 0407) [...]
hatte cet liste pour verwendet [...] |
|
|
| |
|
|