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