C# Herkunftsland eines Windowsbenutzers ermitteln..

...komplette Frage anzeigen

1 Antwort

Hallo,

ich denke mit den beiden Funktionen

GetSystemDefaultLangID() und VerLanguageName()

sollte es gehen...

genaueres bei MSDN...

MfG

Nicky

supernicky 06.07.2011, 22:57

Habs geprüft, es klappt super..

Ich kann dir hier nur den Assemblercode zeigen, aber in C++ dürfte das ähnlich sein.

Rückgabe der folgenden Funktion ist ein 32bit Wert der in der nächsten Funktion gebraucht wird.

invoke GetSystemDefaultLangID

eax ist das Ergebnis der oberen Funktion, dann ein Zeiger auf einen Nullterminierten String (40 byte sollte reichen) und die Größe des Puffers = 40

invoke VerLanguageName, eax, ADDR strlang, 40

Dann den Nullterminierten String mit der MessageBox ausgeben.

invoke MessageBox, NULL, ADDR strlang, ADDR strlang, MB_OK

Ergebnis bei mir ist:

Deutsch (Deutschland)

MfG

Nicky

0
GF123 07.07.2011, 01:45
@supernicky

Der Fragesteller programmiert mit C# (.NET). Und hat somit vermutlich nicht vor, sich ohne Not den Zugriff auf native Windows-API-Funktionen per Platform Invoke zurechtzubasteln und nullterminierte Strings aus dem Speicher zu fischen. ;)

System.Globalization.CultureInfo osCultureInfo = System.Globalization.CultureInfo.InstalledUICulture;
String displayname = osCultureInfo.DisplayName; // "Deutsch (Deutschland)"
String name = osCultureInfo.Name; // "de-DE"

Im Übrigen hat .NET sicherlich ausgefeilte Mechanismen für "I18N" und "L10N", so dass auf dem obigen aufbauende Konstrukte wie

if (name.startsWith("de")) { buttonText = "klick"; } else ...

wohl eher nicht angesagt sind.

0
xAntw0rtx 08.07.2011, 10:25
@GF123

vielen dank der letzt kommentar war am hilfreichten..

frage ist somit beantwortet

0

Was möchtest Du wissen?