| |
|
|
- Página 1 - |
|
Stephan Sonneborn |
¡Hola zusammen,
Yo möchte por Profano el Tastaturlayout en Inglés ajustar. Normalerweise mache Yo el así:
Aber el führt a uno Zugriffsverletzung en USER32.DLL.
Wer weiß Rat?
(WIN10, 64Bit) |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 21.03.2022 ▲ |
|
|
|
|
« Dieser Contribución wurde como Solución gekennzeichnet. » |
|
Georg Teles | Bueno Abend,
ahem, el Función LoadKeyboardLayout esperado una Adresse a LayoutID (Addr(TLayout#)) ... el Función UnloadKeyboardLayout esperado wiederrum el Handle, welches de el Función LoadKeyboardLayout generiert wurde.
Im Ejemplo habe rápidamente algo gebastelt (aktuelles Layout se ausgelesen, englische & danach tschechische Tastaturlayout voluntad hinzugefügt y anschließend lejos & el 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 Tastatur
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "aktuelle Tastatur: "+String$(TLayout#,0)
imprimir
' aktuelle speichern
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)
imprimir "LayoutID_en: ";(hLayoutID_en&);" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "englische Tastatur: "+String$(TLayout#,0)
imprimir
WAITINPUT
' tschechische Tastaturlayout hinzufügen
TLayout$ = "00000405"
String TLayout#,0 = TLayout$
' tschechische Layout ID sichern !
hLayoutID_cs& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimir "LayoutID_cs: ";hLayoutID_cs&;" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "tschechische Tastatur: "+String$(TLayout#,0)
imprimir
WAITINPUT
' englische & tschechische Layout entfernen
imprimir UnloadKeyboardLayout(hLayoutID_en&);" (1 = Erfolg/EN-Layout lejos)"
imprimir UnloadKeyboardLayout(hLayoutID_cs&);" (1 = Erfolg/CS-Layout lejos)"
imprimir
' en ursprüngliches Layout zurücksetzen
String TLayout#,0 = aktuelle$
' vorheriges Layout neu invitar !
imprimir LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "aktuelle Tastatur wiederhergestellt: "+String$(TLayout#,0)
'----------------------------------------------------
DISPOSE TLayout#
WAITINPUT
Editar: En LoadKeyboardLayout(Addr(TLayout#), 1) kann el String direkt benutzt voluntad: LoadKeyboardLayout(Addr(TLayout$), 1) wogegen el Función GetKeyboardLayoutName(Addr(TLayout#)) una Zona benötigt.
Grüße Georg |
|
|
| |
|
|
|
|
Sven Bader | ¡Hola Stephan,
bist du dir sicher, dass dies en Windows 10 überhaupt todavía así simplemente va? El Systeme riegeln solche tiefen Eingriffe sí siempre más de.
Mit media zwei Schüssen en el Blaue bin Yo desafortunadamente gescheitert, 1. Fontname# großzügiger dimensionieren, 2. El erste "0" löschen, el Fehler kommt trotzdem auch en me.
Yo habe folgendes en Stackoverflow gefunden, hier se auch una Null weniger verwendet y lo se kommentiert, dass el Keyboardlayout así lediglich previsto aber todavía no aktiviert se y eben en el Kommentaren el Verdacht, dass lo bajo Windows 10 no mehr va. [...] (Stackoverflow)
Grüße Sven |
|
|
| |
|
|
|
Stephan Sonneborn | ¡Hola Sven, vielen Dank para Su Tests. Yo inzwischen herausbekommen, dass el Übergabe uno Stings, z.B. "00000407" para DE oder "00000409" para EN el Tastaturlayout umstellt. Yo debería ahora sólo todavía wissen, como el aktuelle Taststurlayout heißt. Also el, bevor Yo umstelle. Dann kann Yo al Programmende otra vez zurückstellen... |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 24.03.2022 ▲ |
|
|
|
|
Georg Teles | Bueno Abend,
ahem, el Función LoadKeyboardLayout esperado una Adresse a LayoutID (Addr(TLayout#)) ... el Función UnloadKeyboardLayout esperado wiederrum el Handle, welches de el Función LoadKeyboardLayout generiert wurde.
Im Ejemplo habe rápidamente algo gebastelt (aktuelles Layout se ausgelesen, englische & danach tschechische Tastaturlayout voluntad hinzugefügt y anschließend lejos & el 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 Tastatur
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "aktuelle Tastatur: "+String$(TLayout#,0)
imprimir
' aktuelle speichern
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)
imprimir "LayoutID_en: ";(hLayoutID_en&);" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "englische Tastatur: "+String$(TLayout#,0)
imprimir
WAITINPUT
' tschechische Tastaturlayout hinzufügen
TLayout$ = "00000405"
String TLayout#,0 = TLayout$
' tschechische Layout ID sichern !
hLayoutID_cs& = LoadKeyboardLayout(Addr(TLayout#), 1)'~KLF_ACTIVATE)
imprimir "LayoutID_cs: ";hLayoutID_cs&;" (>0 = Erfolg, LayoutID)"
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "tschechische Tastatur: "+String$(TLayout#,0)
imprimir
WAITINPUT
' englische & tschechische Layout entfernen
imprimir UnloadKeyboardLayout(hLayoutID_en&);" (1 = Erfolg/EN-Layout lejos)"
imprimir UnloadKeyboardLayout(hLayoutID_cs&);" (1 = Erfolg/CS-Layout lejos)"
imprimir
' en ursprüngliches Layout zurücksetzen
String TLayout#,0 = aktuelle$
' vorheriges Layout neu invitar !
imprimir LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
GetKeyboardLayoutName(Addr(TLayout#))
imprimir "aktuelle Tastatur wiederhergestellt: "+String$(TLayout#,0)
'----------------------------------------------------
DISPOSE TLayout#
WAITINPUT
Editar: En LoadKeyboardLayout(Addr(TLayout#), 1) kann el String direkt benutzt voluntad: LoadKeyboardLayout(Addr(TLayout$), 1) wogegen el Función GetKeyboardLayoutName(Addr(TLayout#)) una Zona benötigt.
Grüße Georg |
|
|
| |
|
|
|
Georg Teles | Nabend nochmals,
el para Schluss auskommentierte Línea zuvor muss doch rein:
' vorheriges Layout geladen: como dieses ya existiert ha, muss no necesariamente
' neu geladen voluntad, nachfolgende Línea kann hier vernachlässigt voluntad!)
'imprimir LoadKeyboardLayout(Addr(TLayout#), 1);" (1 = Erfolg)"'~KLF_ACTIVATE)
si uno mehrere Tastaturlayouts anfangs ha y el Ejemplo ausführt, se el erste Layout para Schluss de el Liste ausgewählt ... also más bien bewusst el vorherige Layout, qué zuvor eingestellt war, invitar. (habe el Línea en el vorherigen Post otra vez kommentiert)
Editar: como fällt me una, hatte veces una PCU geschrieben, el en el Grunde el Liste el Idiomas beinhaltet (Sprachwerte en Dezimalangaben, esta necesario aún en Hexadezimale umgewandelt voluntad siehe para Alemán 1031 = Hex 0407) [...]
hatte esta Liste dafür verwendet [...] |
|
|
| |
|
|