Path de Diretórios especias

Terça-feira, 27 dUTC Maio dUTC 2008

Há determinas situações em que se torna necessário saber o caminho de um diretório de sistema, porém sabemos que esse diretório pode variar de acordo com a versão do windows, ou mesmo com o modo com que foi instalado, por exemplo o diretório do windows normalmente é “C:\WINDOWS”, porém em máquinas com o Windows NT ele é por padrão “C:\WINNT”, e ainda há a posibilidade de se customizar o diretório durante  instalação, nas linhas abaixo eu mostro como identificar o diretórios do windows para qualquer instalação, e também como descobrir alguns outros diretórios que podem ser interessantes, assim como a pasta “Meus Documentos”.

Há mais de uma maneira para descobrir o path de alguns diretório e primeiro vou mostrar algumas funções de uso específico e mais adiante mostrarei uma função que pode recuperar um grande gama de diretórios de sistema, em ambos os casos as funções se encontram na unit “shlobj” e utizam a API do windows:

1. Funções de uso específico


//Diretório Temporário do usuário( {usuario}\Configurações Locais\Temp )
function getTempDir: String;
var lng: DWORD;
begin
 SetLength(Result, MAX_PATH);
 lng := GetTempPath( MAX_PATH, PChar(Result)) ;
 SetLength(Result, lng) ;
end;

//Diretório do Windows(c:\windows)
function getWinDir: String;
var
 lng: DWORD;
begin
 SetLength(Result, MAX_PATH) ;
 lng := GetWindowsDirectory(PChar(Result), MAX_PATH);
 SetLength(Result, lng) ;
end;

//Diretório de sistema(c:\windows\system32)
function getSysDir: String;
var
 lng: DWORD;
begin
 SetLength(Result, MAX_PATH) ;
 lng := GetSystemDirectory(PChar(Result), MAX_PATH);
 SetLength(Result, lng) ;
end;

2. Função de uso geral

Para esta função é necessário utilizar de constantes que estão declaradas na unit “shlobj”:


function getSpecialDir: string;
 var
 r: Bool;
 path: array[0..MAX_PATH] of Char;
 begin
 //substitua COLOQUE_AQUI_A_CONSTANTE_DESEJADA
 //pela constante relativa ao diretório desejado
 r := ShGetSpecialFolderPath(0, path, COLOQUE_AQUI_A_CONSTANTE_DESEJADA, False);
 if not r then raise Exception.Create('Diretório não Encontrado');
 Result := Path;
 end;

Vale notar que nem todas as possibilidades são contempladas, para algumas você terá que consultar a documentação do windows, nas versões mais antigas do delphi ele pode ser encontrado na pasta documentação e nas mais recentes ele vem junto do help, procure por “CSIDL”, no entanto para facilata a sua vida eu já coloque aqui as mais usadas, basta que declare as constantes da seguinte maneira:

const
 CSIDL_ADMINTOOLS =$0030;
 CSIDL_COMMON_ADMINTOOLS =$002f;
 CSIDL_COMMON_DESKTOPDIRECTORY =$0019;
 CSIDL_COMMON_DOCUMENTS =$002e;
 CSIDL_COMMON_FAVORITES =$001f;
 CSIDL_MYDOCUMENTS =$000c;
 CSIDL_MYMUSIC =$000d;
 CSIDL_MYPICTURES =$0027;
 CSIDL_MYVIDEO =$000e;
 CSIDL_PROGRAM_FILES =$0026;
 CSIDL_PROGRAM_FILES_COMMON =$002b;
 CSIDL_SYSTEM =$0025;
 CSIDL_WINDOWS =$0024;

Segue ainda abaixo uma lista das principais constantes declaradas e não declaradas na unit “shlobj”:
Algumas das Constantes Definidas na unit SHLOBJ:
CSIDL_DESKTOP                         = $0000;   –{USUARIO}\Desktop
CSIDL_PROGRAMS                      = $0002;   –{USUARIO}\Menu Iniciar\Programas
CSIDL_PERSONAL                       = $0005;   –{USUARIO}\Meus Documentos
CSIDL_FAVORITES                      = $0006;   –{USUARIO}\Favoritos
CSIDL_STARTUP                         = $0007;   –{USUARIO}\Menu Iniciar\Programas\Inicializar
CSIDL_SENDTO                          = $0009;   –{USUARIO}\SendTo
CSIDL_STARTMENU                    = $000b;   –{USUARIO}\Menu Iniciar
CSIDL_DESKTOPDIRECTORY       = $0010;   –{USUARIO}\Desktop
CSIDL_FONTS                             = $0014;   –C:\Windows\Fonts
CSIDL_COMMON_STARTMENU   = $0016;   –{All Users}\Menu Iniciar
CSIDL_COMMON_PROGRAMS     = $0017;   –{All Users}\Menu Iniciar\Programas
CSIDL_COMMON_STARTUP        = $0018;   –{All Users}\Menu Iniciar\Programas\Inicializar
CSIDL_COMMON_DESKTOPDIRECTORY       = $0019;   –{All Users}\Desktop
CSIDL_APPDATA                        = $001a;   –{USUARIO}\Dados de Aplicativos
CSIDL_LOCAL_APPDATA            = $001c;   –{USUARIO}\Configurações Locais\Dados de Aplicativos
CSIDL_COMMON_FAVORITES     = $001f;   –{All Users}\Favoritos
CSIDL_INTERNET_CACHE           = $0020;   –{USUARIO}\Configurações locais\Temporary Internet Files
CSIDL_COOKIES                          = $0021;   –{USUARIO}\Cookies
CSIDL_HISTORY                          = $0022;   –{USUARIO}\Configurações locais\Histórico
CSIDL_PROFILE                           = $0028;   –{USUARIO}
CSIDL_COMMON_MUSIC             = $0035;   –{All Users}\Minhas Músicas
CSIDL_COMMON_PICTURES        = $0036;   –{All Users}\Minhas Imagens
CSIDL_COMMON_VIDEO             = $0037;   –{All Users}\Meus Vídeos

Algumas Constantes Não Definidas:
CSIDL_ADMINTOOLS                    = $0030    –{USUARIO}\Menu iniciar\Programas\Ferramentas administrativas
CSIDL_COMMON_ADMINTOOLS   = $002f    –{All Users}\Menu iniciar\Programas\Ferramentas administrativas
CSIDL_COMMON_DOCUMENTS    = $002e    –{All Users}\Documentos
CSIDL_MYMUSIC                           = $000d    –{USUARIO}\Minhas Músicas
CSIDL_MYPICTURES                      = $0027    –{USUARIO}\Minhas Imagens
CSIDL_MYVIDEO                           = $000e    –{USUARIO}\Meus Vídeos
CSIDL_PROGRAM_FILES                = $0026    –C:\Arquivos de Programas
CSIDL_PROGRAM_FILES_COMMON  = $002b    –C:\Arquivos de Programas\Arquivos Comuns
CSIDL_SYSTEM                             = $0025    –C:\Windows\System32
CSIDL_WINDOWS                         = $0024    –C:\Windows

Deixe uma resposta