以前曾用 GetWindowsDirectory、GetSystemDirectory、GetTempPath 等函数获取系统常用文件夹;
也用过 SHGetSpecialFolderLocation、SHGetPathFromIDList 函数获取过更多常用路径;
但这都不如用 GetEnvironmentVariable 获取系统变量来得快.
//譬如 WINDIR 是表示系统目录的系统变量, 可以这样获取:
var
s: string ;
begin
s : = GetEnvironmentVariable( ' WINDIR ' );
ShowMessage(s); { C:\WINDOWS }
end ;
(* --------------------------------------------------------------------------------
WINDIR {系统目录 - C:\WINDOWS }
SYSTEMROOT { 系统目录 - C:\WINDOWS }
SYSTEMDRIVE { 系统根目录 - C: }
HOMEDRIVE { 当前用户根目录 - C: }
USERPROFILE { 当前用户目录 - C:\Documents and Settings\wy }
HOMEPATH { 当前用户路径 - \Documents and Settings\wy }
TMP { 当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp }
TEMP { 当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp }
APPDATA { 当前用户数据文件夹 - C:\Documents and Settings\wy\Application Data }
PROGRAMFILES { 程序默认安装目录 - C:\Program Files }
COMMONPROGRAMFILES { 文件通用目录 - C:\Program Files\Common Files }
USERNAME { 当前用户名 - wy }
ALLUSERSPROFILE { 所有用户文件目录 - C:\Documents and Settings\All Users }
OS { 操作系统名 - Windows_NT }
COMPUTERNAME { 计算机名 - IBM-B63851E95C9 }
NUMBER_OF_PROCESSORS { 处理器个数 - 1 }
PROCESSOR_ARCHITECTURE { 处理器芯片架构 - x86 }
PROCESSOR_LEVEL { 处理器型号 - 6 }
PROCESSOR_REVISION { 处理器修订号 - 0905 }
USERDOMAIN { 包含用户帐号的域 - IBM-B63851E95C9 }
COMSPEC { C:\WINDOWS\system32\cmd.exe }
PATHEXT { 执行文件类型 - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pyo;.pyc;.py;.pyw }
Path { 搜索路径 } s: string ;
--------------------------------------------------------------------------------*)
另外, 可以利用 .. 到上层目录, 如:
begins : = GetCurrentDir;
ShowMessage(s); { C:\Documents and Settings\wy\My Documents\RAD Studio\Projects }
SetCurrentDir( ' .. ' );
s : = GetCurrentDir;
ShowMessage(s); { C:\Documents and Settings\wy\My Documents\RAD Studio }
SetCurrentDir( ' ..\.. ' );
s : = GetCurrentDir;
ShowMessage(s); { C:\Documents and Settings\wy }
end;
外一篇:
Windows 提供了API函数SetEnvironmentVariable,不过这个函数只能修改当前进程的环境变量,而不能修改其他进程和系统的变量。
要修改系统的环境变量,需要修改注册表SYSTEM\CurrentControlSet\Control\Session Manager\Environment下的项,然后发送WM_SETTINGCHANGE消息。
添加Registry单元
var
rv: DWORD;
begin
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SYSTEM\CurrentControlSet\Control\Session ' +
'Manager\Environment', False);
WriteString(name, value);
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LParam
(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, rv);
finally
Free
end
end;