Windows 的环境字符串
Copyrigh (940801,cndev)
Windows 注册表中有不少很特殊的形如"%xxx%"的字符串,这些字符串一般是表示某个与 Windows 安装路径或用户名相关的目录,但字符串的内容却和 Windows 安装路径以及用户名无关,也就是说,你可以在任何一台机器以及任何一个用户上使用这些字符串得到和这台机器以及这个用户相关的系统目录的 path,这在 Windows 编程中是很有用的。
以下是我所知道的环境字符串,我对它们作了一个简单的说明:
%SystemRoot% Windows 安装目录; Win95/98 一般是 C:\Windows; WinNT/2000 一般是 C:\WinNT
%SystemDrive% Windows 操作系统所在驱动器; 一般是 C:
%UserProfile% 用户个人目录; Win95/98 一般是 %SystemRoot%\Profiles\Administrator; WinNT/2000 一般是 %SystemDrive%\Documents and Settings\Administrator ("Administrator"在此是用户名)
%ProgramFiles% 应用程序安装目录; 一般是 %SystemDrive%\Program Files
%WinDir% Windows 安装目录; 我没发现它和 %SystemRoot% 有什么不同之处
%CommonProgramFiles% 共享文件安装目录; 一般是 %ProgramFiles%\Common Files
%AllUsersProfile% All Users 的目录; Win95/98 一般是 %SystemRoot%\Profiles\All Users;WinNT/2000 一般是 %SystemDrive%\Documents and Settings\All Users
%Temp% 用户临时目录; 一般是 %UserProfile%\Local Settings\Temp
您可以直接在资源管理器或者 IE 的地址栏中输入这些字符串,资源管理器或者 IE 会将它转换成通常的目录名。
关于它们的使用,Windows 提供了一个将它们转换为正常路径的 API 函数:
DWORD ExpandEnvironmentStrings(
LPCTSTR lpSrc, // pointer to string with environment variables
LPTSTR lpDst, // pointer to string with expanded environment variables
DWORD nSize // maximum characters in expanded string
);
For example:
procedure TForm1.Button1Click(Sender: TObject);
var
EnviormentStr: PChar;
begin
EnviormentStr:= AllocMem(MAX_PATH + 1);
ExpandEnvironmentStrings('%ProgramFiles%', EnviormentStr, MAX_PATH);
Edit1.Text:= EnviormentStr;
FreeMem(EnviormentStr);
end;
当然对于某些环境字符串,可以使用 API 来直接获得它,例如:
可以用 GetWindowsDirectory 来获得 %SystemRoot%,用 GetTempPath 来获得 %Temp%。此外,
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
下列出了很多环境字符串,可以通过 TRegistry 读取。
如果您知道某个字符串没有在此列出来,请给我发 email: lzh@43210.com,万分感谢!