Entwickler-Ecke

Windows API - Gebietsschema?


Tpercon - Do 19.06.03 15:08
Titel: Gebietsschema?
Wie ermittel ich das auf dem System eingestellte Gebietsschema?

Gruß


Anonymous - Di 24.06.03 00:44

per

Quelltext
1:
LANGID GetSystemDefaultLangID(void);                    


Sollte in der Windows.pas deklariert sein.[/code]


Tpercon - Mo 07.07.03 10:07

Wie bekomme ich an Hand des Identifier die Sprache?


Delete - Mo 07.07.03 11:44

Kuck doch mal im MSDN (http://www.msdn.microsoft.com) nach GetSystemDefaultLangID, da sollte alles weitere stehen.


Tpercon - Mo 07.07.03 12:16

Daher habe ich die Infos ja, nur es muß doch eine Funktion geben, die die zugehörige Language des Identifier (siehe Language Identifiers and Locales) ausliest.


Anonymous - Mo 07.07.03 14:35

Die LangID besteht aus der Sprache an sich und der Sortier-ID ... was genau willst du haben?


Tpercon - Mo 07.07.03 14:43

Ich wüßte gerne wie ich z.B. von der 0x0407 auf Deutschland komme?!


Anonymous - Mo 07.07.03 14:56

Konfuzius sagt ... nimm das PSDK:

Statt suchen zu lassen [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_2jzn.asp] :mrgreen:


Tino - Mo 07.07.03 15:14

Vielleicht hilft dir ja diese FAQ weiter: ... die User- & Systemsprache ermitteln? [http://www.delphi-forum.de/viewtopic.php?t=12521]

Gruß
Tino


Tpercon - Mo 07.07.03 15:15

@ Assarbad: Gefunden habe ich das auch, nur kann ich das leider nicht für meine Frage umsetzen.

@ Tino: Das ist perfekt! Danke dir!


Anonymous - Mo 07.07.03 15:22

Sekunde mal. Ich erwartete hier mit einem Programmierer zu sprechen.



Jetzt alles fit?


Tpercon - Mo 07.07.03 15:43

Und diese Decodierung bekomm ich halt nicht hin. :oops:


Anonymous - Mo 07.07.03 15:52

Wie, es klappt auch nicht mit obigem Source, oder du konntest das nicht aus der Doku ableiten? Weil wenn der Source nicht funzt, muss ich nochmal nachschauen.


Tpercon - Mo 07.07.03 15:59

Ich bekomme es nicht hin, die LangID als lesbaren String auszugeben.


Delete - Mo 07.07.03 16:47

Tpercon hat folgendes geschrieben:
Und diese Decodierung bekomm ich halt nicht hin. :oops:

Vielleicht ist das bei neuen Delphi-Versionen anders, aber bei Delphi 5 hat Borland ein paar der nützlichen Makros vergessen, mit denen man bei Microsoft verwöhnt wird. Ausgehend von den Makros aus der "WinNT.h" und den Beschreibungen im PSDK habe ich mir die Makros selbst geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
function MAKELANGID(usPrimaryLanguage, usSubLanguage: BYTE): WORD;
begin
  Result := (usSubLanguage shl 10or usPrimaryLanguage;
end;

function PRIMARYLANGID(lgid: WORD): Word;
begin
  Result := lgid and $3ff;
end;

function SUBLANGID(lgid: WORD): WORD;
begin
  Result := lgid shr 10;
end;

function MAKELCID(wLanguageId, wSortId: WORD): DWORD;
begin
  Result := (wSortId shl 16or wLanguageId;
end;

function MAKESORTLCID(wLanguageId, wSortId, wSortVersion: WORD): DWORD;
begin
  Result := MAKELCID(wLanguageId,wSortId) or (wSortVersion shl 20);
end;

function LANGIDFROMLCID(lcid: DWORD): WORD;
begin
  Result := WORD(lcid);
end;

function SORTIDFROMLCID(lcid: DWORD): WORD;
begin
  Result := WORD((lcid shr 16and $F);
end;

function SORTVERSIONFROMLCID(lcid: DWORD): WORD;
begin
  Result := WORD((lcid shr 20and $F);
end;

Damit geht die "Dekodierung" natürlich sehr einfach, wenn man nicht zufällig einen Assarbad in der Nähe hat, der aushilft. :mrgreen:


Ansonsten fällt mir nur ein, mit Dankeshymnen à
Zitat:
@ Tino: Das ist perfekt! Danke dir!

zu warten bis man den Code auch wirklich ausprobiert und Grund zum Danken hat. :wink: Wobei ich sagen muss, wenn ich folgendes mache:

Delphi-Quelltext
1:
2:
3:
SetLength  (txt,MAX_PATH);
SetLength  (txt,VerLanguageName(GetUserDefaultLangId,@txt[1],sizeof(txt)));
ShowMessage(Format('%s',[txt]));

dann erhalte ich DEU als Ergebnis. Na gut, ich habe auch mehr erwartet ... :roll: ... aber der FAQ-Code ist nach meiner bescheidenen Meinung in Ordnung.


Anonymous - Mo 07.07.03 17:00
Titel: Mit Erdbeergeschmack? ... hiero
@Mathias: Schmeiss deinen Code mal in die Code-Library der DP :)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
program Project1;
{$APPTYPE CONSOLE}
uses
  Windows;

{
int GetLocaleInfo(
  LCID Locale,      // locale identifier
  LCTYPE LCType,    // information type
  LPTSTR lpLCData,  // information buffer
  int cchData       // size of buffer
);
}

var
  bla:array[0..1023of Char;
begin
  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGCOUNTRY, @bla, sizeof(bla));
  Writeln('Name des Landes (Englisch)   : ',bla);
  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGLANGUAGE, @bla, sizeof(bla));
  Writeln('Name der Sprache auf Englisch: ',bla);
  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SLANGUAGE, @bla, sizeof(bla));
  Writeln('Name der Sprache lokalisiert : ',bla);
  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVELANGNAME, @bla, sizeof(bla));
  Writeln('Orginalname der Sprache      : ',bla);
  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVECTRYNAME , @bla, sizeof(bla));
  Writeln('Orginalname des Landes       : ',bla);
  Readln;
end.


Delete - Mo 07.07.03 17:59
Titel: Re: Mit Erdbeergeschmack? ... hiero
MathiasSimmack hat folgendes geschrieben:
Na gut, ich habe auch mehr erwartet ...

... aber dann hätte ich auch vielleicht length(txt) anstelle von sizeof(txt) benutzen müssen:

Delphi-Quelltext
1:
2:
3:
4:
SetLength  (txt,MAX_PATH);
SetLength  (txt,
  VerLanguageName(GetUserDefaultLangId,@txt[1],length(txt)));
ShowMessage(txt);

So sehe ich selbstverständlich "Deutsch (Standard)". Also - mein Fehler. :oops:

Assarbad hat folgendes geschrieben:
@Mathias: Schmeiss deinen Code mal in die Code-Library der DP :)

Ok, wieso nicht.


Tino - Di 08.07.03 08:51
Titel: Re: Mit Erdbeergeschmack? ... hiero
MathiasSimmack hat folgendes geschrieben:
Assarbad hat folgendes geschrieben:
@Mathias: Schmeiss deinen Code mal in die Code-Library der DP :)

Ok, wieso nicht.

Hier würden sich mehr als 3000 User auch über den Code in der FAQ freuen :-)


Anonymous - Di 08.07.03 10:11

Hallo Tino,

ist ja fast wie im echten Leben. Jeder benutzt eine eigene Terminologie ... da braucht sich keiner wundern, daß keiner mehr was versteht :mrgreen:

Ich werd's wahrscheinlich nachtragen ...


Delete - Di 08.07.03 13:58

Ja, bitte - sei mal nachtragend und schreib gleich meine Funktionen mit dazu. Wie in der DP halt. Dann brauch ich das nicht machen ...


Anonymous - Di 08.07.03 18:51

@Tino & Mathias: Habs nachgetragen ...

Jetzt bin ich nicht mehr nachtragend :)