Newsgroup: it.comp.lang.delphi
Titolo: trovare directory

ciao a tutti
Qualcuno mi sa dire se esiste una funzione che mi permette di trovare
la directory dove sono installati i programmi..tipo "c:\programmi\" e
anche quella del menu di avvio :
"c:\Documents and Settings\erik\Menu Avvio\Programmi"
le une che 2 funzioni che ho trovato sono queste
"GetSystemDirectory","GetWindowsDirectory" ma non fanno al caso mio.
grazie
erik



credo che si possano recuperare dal registro di windows
Simone 

Questa è un po' complicata ma dovrebbe fare al caso tuo:
Function SHGetPathFromIDList(pidl : Pointer; pszpath : Pointer) : 
Boolean; stdcall;
external 'Shell32.Dll'
name     'SHGetPathFromIDList';
function SHGetSpecialFolderLocation(hwndOwner : HWND; nFolder : integer; 
var ppidl : PItemIDList) : HResult; Stdcall;
external 'Shell32.Dll'
name     'SHGetSpecialFolderLocation';
Type
   PSHItemID = ^TSHItemID;
   TSHItemID = record
                  cb   : word;
                  abID : array[0..0] of BYTE;
               end;
   PItemIDList = ^TItemIDList;
   TItemIDList = record
                    mkid: TSHITEMID;
                 end;
Function SelezionaCartellaParticolare(Handle   : HWND;
                                       Cartella : Integer) : String;
var
   pidlBrowse     : PItemIDList;
   pszPath        : array[0..MAX_PATH] of char;
   ppMalloc       : IMalloc;
   S              : String;
begin
   CoInitialize(Nil);
   CoGetMalloc(1, ppMalloc);
   S  := '';
   If SHGetSpecialFolderLocation(Handle, Cartella, pidlBrowse) = NOERROR 
Then
      try
       if (pidlBrowse <> nil) then
          begin
            SHGetPathFromIDList(pidlBrowse, @pszPath);
            S := StrPas(pszPath);
          end;
       finally
       end;
   ppMalloc.Free(pidlBrowse);
   CoUninitialize;
   Result := S;
end;
Le possibili costanti per la funzione sono:
Const
   CSIDL_DESKTOP            = $0000;         // Desktop
   CSIDL_PROGRAMS           = $0002;         // Programmi
   CSIDL_CONTROLS           = $0003;         // Controlli
   CSIDL_PRINTERS           = $0004;         // Stampanti
   CSIDL_PERSONAL           = $0005;         // Personali
   CSIDL_FAVORITES          = $0006;         // Preferiti
   CSIDL_STARTUP            = $0007;         // Iniziale
   CSIDL_RECENT             = $0008;         // Recenti
   CSIDL_SENDTO             = $0009;         // Invia a...
   CSIDL_BITBUCKET          = $000A;         // Cestino
   CSIDL_STARTMENU          = $000B;         // Start menu
   CSIDL_DESKTOPDIRECTORY   = $0010;         // Desktop Directory
   CSIDL_DRIVES             = $0011;         // Driver
   CSIDL_NETWORK            = $0012;         // Rete
   CSIDL_NETHOOD            = $0013;         // Risorse di rete
   CSIDL_FONTS              = $0014;         // Font
   CSIDL_TEMPLATES          = $0015;         // Nuovo...
   CSIDL_AvvioAll           = $0016;         // Menù avvio 
   (All user)
   CSIDL_ProgrammiAll       = $0017;         // Programmi 
   (All user)
   CSIDL_StartupAll         = $0018;         // Esecuzione automatica 
   (All user)
   CSIDL_DesktopAll         = $0019;         // Desktop 
   (All user)
   CSIDL_PreferitiAll       = $001F;         // Preferiti 
   (All user)
   CSIDL_INTERNETTemp       = $0020;         // Temporanei Internet
   CSIDL_Cookies            = $0021;         // Cookies
   CSIDL_Cronologia         = $0022;         // Cronologia
   CSIDL_AppDataAll         = $0023;         // Dati applicazioni 
   (All user)
   CSIDL_WinDir             = $0024;         // WinDir
   CSIDL_SysDir             = $0025;         // SysDir
   CSIDL_IstPrograms        = $0026;         // Istallazione Programmi
   CSIDL_Documenti          = $0027;         // Documenti
   CSIDL_Administrator      = $0028;         // Administrator
   CSIDL_Sys32Dir           = $0029;         // Sys32Dir
   CSIDL_FileComuni         = $002B;         // File Comuni
   CSIDL_ModelliAll         = $002D;         // Modelli 
   (All user)
   CSIDL_DocumentiAll       = $002E;         // Documenti 
   (All user)
   CSIDL_AmministrazioneAll = $002F;         // Strumenti 
amministrazione (All user)
   CSIDL_Accessori          = $0030;         // Accessori
Ciao,
David


GetEnvironmentVariable ti legge una variabile d'ambiente.
Leggi "ProgramFiles" ed hai il path per "c:\programmi"
Leggi "UserProfile", aggiungi "\Menu avvio\Programmi" e hai il path per 
il menu d'avvio dell'utente attuale
Spero di esserti stato d'aiuto.

 Questa è un po' complicata ma dovrebbe fare al caso tuo:
Ottimo codice, grazie :)
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/