Pfade von Systemordnern lassen sich nicht ermitteln
-
Hallo liebe Kollegen,
Ich habe ein Problem:
Mit meiner Funktion unten kann ich nicht die Pfade für Papierkorb, Systemsteuerung, Netzwerk, Drucker, Internet ... ermitteln.AnsiString __fastcall TOrdnerstruktur::GetSystemPath(int sysordner_const) { char cBuf[MAX_PATH]; LPITEMIDLIST pidl; AnsiString ergebnis; SHGetSpecialFolderLocation(Application->Handle, sysordner_const, &pidl); if(pidl != NULL) { if(SHGetPathFromIDList(pidl, cBuf)) { ergebnis = cBuf; } } return (ergebnis); }
Warum gibt mir die Funktion bei diesen Konstanten immer 0 zurück?
Wie kann ich diese Systempfade ermitteln?Auf Ihre Antwort würde ich mich sehr freuen!
-
schon SHGetSpecialFolderPath probiert?
-
Habs versucht, gibts auch ein leeren String zurück!
-
Weil die genannten Sachen keine Pfade haben
-
Steht ja auch bei den Beschreibungen der CSIDLs: "A virtual folder"
-
Ich habe ehe eine sachliche Antwort erwartet, nicht wie die beiden letzten!
Natürlich sind die Orte virtuell, und die Pfade zu diesen Ordnern befindem sich nicht in der Dateisystem, sondern die stehen alle in der Registry und sehen z.b. so aus:
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
Problem ist diese zu ermitteln.
-
Was genau willst du denn da ermitteln? Die Systemsteuerung z.B. hat wie schon gesagt wurde keinen Pfad.
-
Darf ich mal fragen *warum* du das auslesen willst?
-
Hallo,
jeden virtuellen Ordner (Papierkorb, Systemsteuerung...) hat eine Pfad-Kennung in Registry wie oben schon beschrieben. Diese Pfad-Kennung muss man ermitteln um den Inhalt den jeweiligen Ordner aufzulisten oder öffnen zu können.
Ich versuche Ordnerstruktur im TTreeView (wie im Windows Explorer) nachzubauen.@geeky Das Systemsteuerung hat natürlich auch so einen Pfad!
-
Könnte sein das du die Lösung in diesen Artikeln findest:
http://www.codeproject.com/KB/tree/shelltreectrl.aspx
http://www.codeproject.com/KB/atl/shellfoldertree.aspx