ich habe doch von Günter mal eine Funktion bekommen, aber ich finde die nicht hier im Forum
Code: Alles auswählen
FUNCTION GetKeyboardLanguage()
LOCAL nLayout := DllCall( "user32.dll", DLL_STDCALL, "GetKeyboardLayout", 0 )
RETURN bAnd( nLayout, 0xFFFF )
auf dem Notebook mit chinesischem OS() hat er 2025, also bekommt der User eine Warnung !
aber warum "nur" eine Warnung ... nun habe ich sowas gefunden:
Code: Alles auswählen
Function GetKeyboardList()
local cBuffer:=Space(4), nEntries, i, aRetArray:={}
nEntries:=DllCall("User32.dll",DLL_STDCALL,"GetKeyboardLayoutList", 1,@cBuffer)
cBuffer:=Replicate(Chr(32), nEntries*4)
DllCall("User32.dll",DLL_STDCALL,"GetKeyboardLayoutList", 1, @cBuffer)
For i:=1 to nEntries
AAdd(aRetArray, Bin2L(SubStr(cBuffer,((i-1)*4)+1,4)))
*
* mein Versuch es "lesbarer" zu machen für eine Combobox
* AAdd(aRetArray,STR( bAnd(Bin2L(SubStr(cBuffer,((i-1)*4)+1,4)), 0xFFFF )))
next i
return aRetArray
// Then you can pass any of the keyboard IDs returned in the array to:
Function ActivateKeyboardLayout(nLayout)
RETURN If(DllCall("User32.dll",DLL_STDCALL,"ActivateKeyboardLayout",nLayout)==0,.f.,.t.)
auch scheint mir die Frage zu sein "wo" ich es abfragen soll d.h. wenn ich aus der CMD Box
(Codepage OEM) die Xbase++ GUI Application starte schaltet er immer auf "default" chinesisch.
Auch aus der Desktop Verknüpfung gestartet, wobei DE aktive ist, wird beim Start der Application das Keyboard immer auf "default" gestellt.
Das passiert auch mit dem Explorer und Notepad und so ... hat jemand eine Lösung für sowas ?
Frage : kann man auch "pro SLE" das Keyboard Layout "umschalten" ?
hm ... und was kommt nun bei "hYourKeyboardLayout" für ein Wert rein (1031/2025) ?> I try to use win api function ActivateKeyboardLayout in Preblock of SLE
> (GetClass) to switch from one language to another. The function works
> perfectly in VB or C++, but don't nothing in Xbase++.
This does not work on Windows < Win2000/XP because ActivateKeyboarLayout
always only works for the current thread. The SLE object is created in
a different thread, though.
Please check whether you can use the message WM_INPUTLANGCHANGEREQUEST:Code: Alles auswählen
#define WM_INPUTLANGCHANGEREQUEST 0x0050 DllCall( "user32.dll", DLL_STDCALL, "SendMessageA", ; oSle:GetHWND(), WM_INPUTLANGCHANGEREQUEST, 0, hYourKeyboardLayout )