Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi "Arbeitsplatz" in der Sprache des installierten Windows... (https://www.delphipraxis.net/80988-arbeitsplatz-der-sprache-des-installierten-windows.html)

FriFra 18. Nov 2006 17:30


"Arbeitsplatz" in der Sprache des installierten Wi
 
Um die Beschriftung vom "Arbeitsplatz" in der jeweils gültigen Sprache zu bekommen habe ich mir die folgende Funktion geschrieben. Der optionale Parameter "Default" wird nur dann verwendet, wenn das Auslesen einmal nicht funktionieren sollte.
Delphi-Quellcode:
function GetMyComputerName(Default: string = ''): string;
    function ExpandEnvStr(const szInput: string): string;
    begin
      SetLength(Result, ExpandEnvironmentStrings(pChar(szInput), nil, 0));
      ExpandEnvironmentStrings(pChar(szInput), @Result[1], Length(Result));
      Result := StrPas(@Result[1]);
    end;
  var
    Buffer: array[0..MAX_PATH] of char;
    h: hwnd;
    SrcFile: string;
    Index: int64;
    RDF: TRegistry;
  const
    CLSID_MYCOMPUTER = '{20D04FE0-3AEA-1069-A2D8-08002B30309D}';
  begin
    Result := '';

    RDF := TRegistry.Create;
    try
      RDF.RootKey := HKEY_CLASSES_ROOT;
      RDF.OpenKey('CLSID\' + CLSID_MYCOMPUTER, false);

      if (RDF.ValueExists('LocalizedString') = True) and
        (RDF.ReadString('LocalizedString') <> '') then
      begin
        SrcFile := copy(RDF.ReadString('LocalizedString'), 2, MAX_PATH);
        Index := StrToIntDef(Copy(SrcFile, Pos(',', SrcFile) + 1,
          Length(SrcFile)), 0);
        if Index < 0 then
          Index := Index - (2 * Index);
        SrcFile := Copy(SrcFile, 1, Pos(',', SrcFile) - 1);
        SrcFile := ExpandEnvStr(SrcFile);
        if (FileExists(SrcFile) = True) and (Index <> 0) then
        begin
          h := loadlibrary(PAnsiChar(SrcFile));
          try
            if h <> 0 then
            begin
              if Loadstring(h, Index, @Buffer, MAX_PATH) > 0 then
              begin
                Result := StrPas(buffer);
              end
              else
                Result := Default;
            end
            else
              Result := Default;
          finally
            freelibrary(h)
          end;
        end;
      end;
      if (Result = Default) and (RDF.ValueExists('') = True) and
        (RDF.ReadString('') <> '') then
        Result := RDF.ReadString('');
    finally
      RDF.Free;
    end;
  end;

Sunlight7 18. Nov 2006 17:43

Re: "Arbeitsplatz" in der Sprache des installierte
 
Für die Benutzer älterer Delphi Versionen (ich glaub' unterhalb 5) solltest Du erwähnen, das das
Delphi-Quellcode:
function GetMyComputerName(Default: string = ''): string;
so sein muss:
Delphi-Quellcode:
function GetMyComputerName(Default: string): string;
mit dem Aufruf:
Delphi-Quellcode:
GetMyComputerName('');
Warum heißt das GetMyComputerName? :gruebel:

Edit: Unter Win95 funkts nicht.

Martin K 18. Nov 2006 17:46

Re: "Arbeitsplatz" in der Sprache des installierte
 
Zitat:

Zitat von Sunlight7
Warum heißt das GetMyComputerName? :gruebel:

Vielleicht weil Arbeitsplatz auf Englisch My Computer heißt? :gruebel:

FriFra 18. Nov 2006 17:47

Re: "Arbeitsplatz" in der Sprache des installierte
 
Zitat:

Zitat von Sunlight7
Warum heißt das GetMyComputerName? :gruebel:

Weil "Arbeitsplatz" auf einem englischen Windows "My Computer" heißt :wink:
Microsoft verwendet bei den Referenzen in den Resourcen der Shell32.dll auch *_MYCOMPUTER ;)

Sunlight7 18. Nov 2006 18:05

Re: "Arbeitsplatz" in der Sprache des installierte
 
Nun Gut, das muss einer Wissen ^^

Funkt nicht mit Win98

Edit: Funkt aber mit WinME :zwinker:

Sunlight7 18. Nov 2006 18:16

Re: "Arbeitsplatz" in der Sprache des installierte
 
Aber eine andere Frage, warum das ganze so extra umständlich? :gruebel:

Darf ich das etwas viel einfacher raus bringen?

Edit: Sorry, das hab' ich erst jetzt gesehen, und dabei hab ich da alte Makros von mir herumliegen, die das können. :(

FriFra 18. Nov 2006 18:38

Re: "Arbeitsplatz" in der Sprache des installierte
 
Zitat:

Zitat von Sunlight7
Funkt nicht mit Win98

:? Habs gerade gesehen... unter Win98 gibt es nur den InfoTip Tesxt und sonst nix... ich suche mal was für 98

Sunlight7 18. Nov 2006 18:48

Re: "Arbeitsplatz" in der Sprache des installierte
 
Siehe:
Zitat:

Zitat von Sunlight7
Darf ich das etwas viel einfacher raus bringen?

Ich hab was, was ab Win95 funkt, darf ich?

Balu der Bär 18. Nov 2006 18:58

Re: "Arbeitsplatz" in der Sprache des installierte
 
Machs doch einfach und frag nicht tausend Mal nach. :roll:

@FriFra: Dein Code liest bei mir aber nicht den aktuellen Namen des Arbeitsplatzes aus. Ich habe die Verknüpfung auf die auf dem Desktop liegt in "Computer" umbenannt, rufe ich ihn auf steht oben in der Titelleiste auch korrekt "Computer". Diesen Namen liest deine Funktion aber nicht aus, ich erhalte den Standard-Bezeichner zurück. :gruebel:

Sunlight7 18. Nov 2006 19:05

Re: "Arbeitsplatz" in der Sprache des installierte
 
Okay, auf Deine Verantwortung :roll:

Siehe


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz