Ländereinstellungen mit WinAPI ermitteln
Übersicht

![]() |
EingeproggtBetreff: Ländereinstellungen mit WinAPI ermitteln |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich versuche gerade, Windows ein paar Informationen zu entlocken. Besonderes interessiert bin ich dabei in die Sprache, mit der das System rennt (Deutsch, Englisch,...). Im Internet fand ich einen VB-Code: http://www.activevb.de/tipps/v...p0277.html Diesen jedoch nach BB zu übersetzen bereitet mir Probleme ![]() Ich hab mir mal Folgendes zusammen gesucht: Code: [AUSKLAPPEN] ;Benötigte UserLib, wenn noch nicht vorhanden:
;.lib "kernel32.dll" ;api_GetSystemDefaultLCID% () : "GetSystemDefaultLCID" ;api_GetLocaleInfo% (Locale%, LCType%, lpLCData$, cchData%) : "GetLocaleInfoA" Const LOCALE_SCOUNTRY = $6 DebugLog "Ergebnis: "+GetLocaleinfo$(LOCALE_SCOUNTRY) WaitKey() End Function GetLocaleinfo$(ID) Local Buffer$="" Local LCID = api_GetSystemDefaultLCID() Local Length = api_GetLocaleInfo(LCID, ID, Buffer$, 0) For i=1 To Length Buffer$=Buffer$+" " ;Nötig? Next api_GetLocaleInfo(LCID, ID, Buffer$, Length) Return Left$(Buffer$, Length-1) End Function Nun ist das Problem, dass in meinem String nichts drin steht... Ich habe es auch mit einer Buffer-Bank versucht. In dieser stehen dann nur unleserliche Zeichen (Ich hab die Bank mit Chr(PeekInt(Bank,i)) ausgelesen) Also wie ichs auch mach, es is falsch. Hat jemand Vorschläge oder noch besser dieses Problem schonmal bewältigt? Danke und mfG, Christoph. PS: Ich probiere auf WinXP herum. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit Strings funktioniert das nicht. Da musst du schon Banks nehmen.
Zitat: Ich hab die Bank mit Chr(PeekInt(Bank,i)) ausgelesen
Byte statt Int. ![]() Code: [AUSKLAPPEN] Const LOCALE_SCOUNTRY = $6
Function GetLocaleInfo$( id ) Local lcid = api_GetSystemDefaultLCID( ) Local buffer = CreateBank( 0 ) Local size = api_GetLocaleInfo( lcid, id, buffer, 0 ) ResizeBank buffer, size api_GetLocaleInfo lcid, id, buffer, size Local info$ For i=0 To size-2 info = info + Chr( PeekByte( buffer, i ) ) Next Return info End Function Print GetLocaleInfo( LOCALE_SCOUNTRY ) WaitKey : End Edit: Statt GetSystemDefaultLCID kannst du auch einfach $400 an GetLocaleInfo übergeben, das hat den gleichen Effekt. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Byte statt Int.
Klingt einleuchtend ![]() Leider funktioniert die sache auch mit deinem Code nicht. "info" ist bei mir: Zitat: 0ç¶
Zitat: Statt GetSystemDefaultLCID kannst du auch einfach $400 an GetLocaleInfo übergeben
Das las ich auch mal auf MSDN, aber mein PC sagt etwas anderes: Code: [AUSKLAPPEN] DebugLog api_GetSystemDefaultLCID()+"<>"+$400
ergibt Zitat: 1031<>1024
Bitte nochmal um aufklärende Worte. Ich kenn mich nimma aus. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, bei mir funktioniert das Beispiel. ![]() Versuch mal einen anderen Wert als LOCALE_SCOUNTRY, zum Beispiel: Code: [AUSKLAPPEN] Const LOCALE_SSHORTDATE = $1F
Müsste "dd.MM.yyyy" ausgeben ... |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für deine Hilfe, aber es scheint so, als ob es an meinem PC liegt ![]() Hab es mit SSHORTDATE und einigen anderen Parametern probiert (SDAYNAME, SMONTHNAME) und es kommt bei keinem ein erwarteter Wert raus. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Seltsam ...
Was gibt der zweite Aufruf von api_GetLocaleInfo bei dir zurück? |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch 1031.
Was mir noch auffiel: Die Kombination Code: [AUSKLAPPEN] 0ç¶+Chr(0)
Kommt erstaunlich oft als Ergebnis. nicht immer, aber oft. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dir ist klar das 1031 = 1024 + 4 + 2 + 1?
WinAPI nutzt $xxx immer für binary flags. für tests darauf ob etwas vorhanden ist also NIEMALS = benutzen sondern flag & 1024 > 0 bzw. flag & zielflag > 0 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group