Ländereinstellungen mit WinAPI ermitteln

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Eingeproggt

Betreff: Ländereinstellungen mit WinAPI ermitteln

BeitragDi, Mai 13, 2008 1:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Embarassed

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

BeitragDi, Mai 13, 2008 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Razz

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

BeitragDi, Mai 13, 2008 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Byte statt Int.

Klingt einleuchtend Embarassed
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

BeitragDi, Mai 13, 2008 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, bei mir funktioniert das Beispiel. Confused
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

BeitragDi, Mai 13, 2008 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Hilfe, aber es scheint so, als ob es an meinem PC liegt Sad
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

BeitragDi, Mai 13, 2008 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 13, 2008 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 13, 2008 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group