Einzelnen Beitrag anzeigen

Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

[Gelöst]Inhalt von Arbeitsplatz parsen und ausgeben

  Alt 19. Aug 2004, 12:09
Hallo,

folgender Code spuckt mir bei allen möglichen CSIDL_* Ordnern den Inhalt aus, ausgerechnet bei CSIDL_DRIVES (Arbeitsplatz) funktioniert es nicht. Dabei enthält EnumObjects die richtige Anzahl, die PIDLs stimmem auch, nur die Namen will er nicht ausspucken..
Falls Syntaxfehler drin sind, sorry, ich musste den Code abtippen.
Die benötigten Units sind natürlich alle eingebunden, wie gesagt es funktioniert mit allen anderen CSIDL_* die ich probiert habe.

Ach ja, in der StrRetToSTring wird der uType auf STREET_* getestet und dementsprechend behandelt, das Ding ist aus der ShellCtrls-Unit !

Vielen Dank für Hilfe.

Delphi-Quellcode:
procedure TForm1.ShellListView1Click(Sender: TObject);
var
  Allocator: IMalloc;
  PDesktop, PSubfolder: IShellFolder;
  PContent: IEnumIDList;
  PIDL: PItemIDList
  StrRet: TStrRet;
  NumIDs: LongWord;

begin
  if SHGetMalloc(Allocator) = NOERROR then
  begin
    if (SHGetSpecialFolderLocation(handle, CSIDL_DRIVES, PIDL) = S_OK) and
         (SHGetDesktopFolder(PDesktop) = S_OK) then
    try
    begin
      PDesktop.BindToObject(PIDL, nil, IID_IShellFolder, Pointer(PSubFolder));
      PSubFolder.EnumObjects(handle, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS, PContent);
      while PContent.Next(1, PIDL, NumIDs) <> S_FALSE do
      begin
        FillChar(StrRet, SizeOf(StrRet), 0);
        PDesktop.GetDisplayNameOf(PIDL, SHGDN_NORMAL, StrRet);
        Memo1.Lines.Add(StrRetToString(PIDL, StrRet));
      end;
    end;
    finally
      //Hier noch Pointer und sonstigen Speicher freigeben..
    end;
  end;
end;
Sebastian
  Mit Zitat antworten Zitat