Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CSIDL_CONTROLS funktioniert nicht!!! (https://www.delphipraxis.net/41564-csidl_controls-funktioniert-nicht.html)

max666 5. Mär 2005 10:20


CSIDL_CONTROLS funktioniert nicht!!!
 
Hallo!

Ich wollte mal das virtuelle Verzeichnis der Systemsteuerung auslesen und alle Programme in eine Tabelle auflisten. Mit CSIDL_PROGRAMS usw. funktioniert das auch. Nur mit CSIDL_CONTROLS geht das nicht!

Hat jemand eine Idee, wie ich an die Einträge in der Systemsteuerung kommt?

Gruß
max666

Luckie 5. Mär 2005 11:46

Re: CSIDL_CONTROLS funktioniert nicht!!!
 
Zitat:

Zitat von max666
Mit CSIDL_PROGRAMS usw. funktioniert das auch. Nur mit CSIDL_CONTROLS geht das nicht!

Ob du es glaubst oder nicht, es wäre unheimlich hilfreich, wenn du uns sagen würdest, WIE du es bisher probiert hast und was du unter "geht das nicht" verstehst. :roll:

max666 5. Mär 2005 13:57

Re: CSIDL_CONTROLS funktioniert nicht!!!
 
Hallo!

Ich habe mit folgender Funktion das virtuelle Verzeichnis von z.B. CSIDL_PROGRAMS ermittelt!

Delphi-Quellcode:
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);
  pMalloc.Free(pidl);
end;



procedure desktopview;
var Handle: HWND;
    FileInfo: TSHFileInfo;
    PIDL: PItemIDList;
begin
CSIDLPROGRAMS:=(GetSpecialFolder(Handle, CSIDL_PROGRAMS));
Und mit Hilfe der Variablen "CSIDLPROGRAMS" und einer rekursieven Funktion kann man dann das gesammt Verzeichnis auslesen! Bei CSIDL_CONTROL geht das aber nicht!

Gruß
max666

MathiasSimmack 5. Mär 2005 14:02

Re: CSIDL_CONTROLS funktioniert nicht!!!
 
Weil das auch ein virtueller Ordner ist, den es nicht wirklich auf der Platte gibt. Zum Auslesen der Systemsteuerung kannst/musst du die passenden Shell-Funktionen bemühen. Du könntest spaßeshalber mal einen Blick in die Beispiele aus Luckies Hier im Forum suchenWin32-API-Tutorials werfen. Ich weiß 100%, dass diese Funktionen in der Splitter-Demo benutzt werden. Allerdings wird dort der "Eigene Dateien"-Ordner ausgelesen. Den Umbau für die Systemsteuerung sollte man aber mit der durchschnittlichen Anzahl an Gehirnzellen hinbekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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