Autor Beitrag
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 16.05.03 14:57 
ausblenden volle Höhe 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:
uses
  ShellAPI, ShlObj, ActiveX;

procedure OpenFolder(iGUID: integer);
var
  sei      : TShellExecuteInfo;
  lpItemId : PItemIdList;
  pmalloc  : IMalloc;
begin
  if(SHGetMalloc(pMalloc) <> S_OK) then begin
    MessageBox(0'Couldn''t get pointer to IMalloc interface.',
      'SHGetMalloc(pMalloc)',
      MB_ICONSTOP);
    Exit;
  end;

  if(SHGetSpecialFolderLocation(0,iGUID,lpItemId)
    = NO_ERROR) then
  begin
    ZeroMemory(@sei,sizeof(TShellExecuteInfo));
    sei.cbsize   := sizeof(TShellExecuteInfo);
    sei.nShow    := SW_SHOWNORMAL;
    sei.lpVerb   := 'open';
    sei.fMask    := SEE_MASK_IDLIST;
    sei.lpIDList := lpItemId;

    ShellExecuteEx(@sei);
  end;

  pMalloc.Free(lpItemId);
end;

(Mit Dank an user profile iconLuckie und user profile icond3g)

Dieser Funktion wird der CSIDL-Wert des gewünschten Ordners übergeben. Das kann der Arbeitsplatz sein, die Systemsteuerung, die Netzwerkumgebung ... kurz gesagt: alle tatsächlich vorhandenen oder auch virtuellen Ordner des System. Eine Übersicht der CSIDL-Konstanten findet man im MSDN bzw. PSDK von Microsoft, z.B. unter dem Suchbegriff SHGetSpecialFolderLocation.

Möglich wäre bspw. die Anzeige der Systemsteuerung:
ausblenden Delphi-Quelltext
1:
OpenFolder(CSIDL_CONTROLS);					

oder des Papierkorbes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
OpenFolder(CSIDL_BITBUCKET);


  // CSIDL_CONTROLS          = Systemsteuerung
  // CSIDL_BITBUCKET         = Papierkorb
  // CSIDL_DRIVES            = Arbeitsplatz
  // CSIDL_FAVORITES         = Favoriten-Ordner
  // CSIDL_NETHOOD           = Netzwerkumgebung
  // ...

usw. - Das ganze funktioniert meines Wissens nach unter allen gebräuchlichen Windows-Versionen. - Übrigens: wer den Explorer mit der typischen Baumstruktur auf der linken Seite sehen will, benutzt einfach "explore" statt "open" in der Zeile
ausblenden Delphi-Quelltext
1:
    sei.lpVerb   := 'open';					


Zuletzt bearbeitet von MathiasSimmack am Di 20.05.03 08:01, insgesamt 1-mal bearbeitet