AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Icon + Caption vom "Arbeitsplatz"

Icon + Caption vom "Arbeitsplatz"

Ein Thema von FriFra · begonnen am 3. Nov 2006 · letzter Beitrag vom 19. Nov 2006
Antwort Antwort
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Icon + Caption vom "Arbeitsplatz"

  Alt 3. Nov 2006, 22:28
Gibt es irgendeine API um an die Caption und das Icon vom "Arbeitsplatz" heran zu kommen?
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 7. Nov 2006, 13:06
Hat keiner eine Idee? Irgendwie muss das doch gehen... ich kann doch mit div. Tools das Icon vom Arbeitsplatz verändern, Das möchte ich dann aber auch auslesen können
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 18. Nov 2006, 18:27
Ich hab jetzt die Lösung gefunden...

Bezeichnung:
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;
Das Icon bekomme ich, indem ich eine Verknüpfung auf den Arbeitsplatz aus den Resourcen meines Programmes entpacke und diese anschließend an "GetShellIcon" übergebe:
Delphi-Quellcode:
function TDupFind_Main.GetShellIcon(FileName: string; NoFile: boolean): integer;
var
  SHFileInfo: TSHFileInfo;
  Tmp: string;
  Txt: textfile;
begin
  if AUic = False then
  begin
    Result := 0;
    //Falls ein Laufwerksbuchstabe übergeben wurde...
    if Length(FileName) = 1 then
      FileName := FileName + ':';
    //Laufwerke sollten mit \ enden...
    if (Length(FileName) = 2) and (copy(FileName, length(FileName), 1) = ':')
      and
      (copy(FileName, length(FileName), 1) <> '\') then
      FileName := FileName + '\';

    // CoInitialize has to be called before SHGetFileInfo (done by Delphi)
    FillChar(SHFileInfo, SizeOf(TSHFileInfo), 0);

    //Dateiino lesen...
    if NoFile = False then
      ShGetFileInfo(PChar(FileName), 0, SHFileInfo, SizeOf(TSHFileInfo),
        SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON)
    else
      ShGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_ARCHIVE, SHFileInfo,
        SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
        SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);

    try
      Result := SHFileInfo.iIcon;
    finally
      // you are responsible for destroying the icon handle
      DestroyIcon(SHFileInfo.hIcon);
    end;
  end
  else
    Result := UIdx;
end;
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#4

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 18. Nov 2006, 21:02
Sorry, das ich diesen Thread nicht früher gesehen hab'.

Einfache Lösung: Siehe
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 18. Nov 2006, 21:11
Hm, ich nutze einfach Shell-Funktionen. Ich verweise mal auf die Splitter-Demo in den Tutorials von Luckie. Die nutzt diverse Funktionen, um den Inhalt des "Eigene Dateien"-Ordners anzuzeigen. Das kann man aber natürlich ändern:
Zitat:
Delphi-Quellcode:
// Funktion "FillTreeView"
// CSIDL_PERSONAL = Eigene Dateien
// CSIDL_DRIVES = Arbeitsplatz
SHGetSpecialFolderLocation(hTV,CSIDL_PERSONAL,pidlRoot);
dann zeigt mir der Tree-View links als Knoten "Arbeitsplatz" samt passendem Symbol. Zugegeben, die Symbole in der List-View links passen nicht, aber dennoch handelt es sich dabei um den Inhalt des Arbeitsplatzes (Festplatten, Dateien von Xy, usw.)

  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 18. Nov 2006, 21:27
Zitat von MathiasSimmack:
Zugegeben, die Symbole in der List-View links passen nicht, aber dennoch handelt es sich dabei um den Inhalt des Arbeitsplatzes (Festplatten, Dateien von Xy, usw.)
Dann hast Du was falsch gemacht
Normalerweise funkt das
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: Icon + Caption vom "Arbeitsplatz"

  Alt 19. Nov 2006, 09:08
Eigentlich nicht. Ich nehme dann nur eine andere "GetShellImg"-Funktion aus meiner Unit, und voilà, dann habe ich auch die richtigen Symbole. Alles nur eine Frage der Einstellung.

Der Punkt ist aber der, dass ich nicht mit irgendwelchen GUIDs und direkten Registryzugriffen arbeiten muss, um Namen und Symbol des Arbeitsplatzes oder anderer Systemelemente zu bekommen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr.
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