魅力博客

魅力Linux|魅力空间|魅力博客|学习Linux|ubuntu日记|电脑教程|手机软件

用 GetEnvironmentVariable 获取常用系统变量



以前曾用 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%    {搜索路径}


另外, 可以利用 .. 到上层目录, 如:

var
s: string;
begin
s := 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;

-----------------------------------------------------------------------------------------------------------

VC中环境变量

 

环境变量是指那些可为系统所使用的包含有环境信息的字符串,根据级别的不同而分为系统环境变量和用户环境变量,并以此给出诸如文件搜索路径,存放临时文件的目录等与系统和用户相关的环境变量。下表列出了用于环境变量访问的函数。

环境变量访问函数
────────────────────────────────────
环境变量函数 函数说明
────────────────────────────────────
GreateEnvironmentBlock() 为特定的用户创建一个环境块
────────────────────────────────────
DestoryEnvironmentBlock() 释放由CreateEnvironmentBlock()创建的环境块
────────────────────────────────────
GetEnvironmentStrings() 得到当前进程的环境块的地址
────────────────────────────────────
FreeEnvironmentStrings() 释放由GetEnvironmentStrings()得到的环境块
────────────────────────────────────
GetEnvironmentVariable() 得到指定环境变量的相关信息
────────────────────────────────────
SetEnvironmentVariable() 添加,修改或删除一个指定的环境变量
───────────────────────────────────

注:环境块是指与进程相关的,包含有环境变量名及其对应值的一个在进程地址空间内分配的内存块。

下面的给出的代码演示了对进程的环境变量进行读,写访问的基本操作过程。

// 待操作的环境变量名
CString sEnvironmentName = "Test";
char cBuffer[256];

// 读取环境变量信息
DWORD dwRet = GetEnvironmentVariable(sEnvironmentName, cBuffer, 256);
if (dwRet == 0)
{
// 如果环境变量不存在,则创建之
CString sEnvironmentValue("<进程的环境变量测试程序>");

BOOL bRet=SetEnvironmentVariable(sEnvironmentName,sEnvironmentValue);
if (bRet == TRUE) AfxMessageBox("环境变量设置完毕!");
else AfxMessageBox("环境变量设置失败!");
}else{
// 如果环境变量存在,显示环境变量内容
CString sMessage("环境变量Test值为:");
sMessage += CString(cBuffer);
AfxMessageBox(sMessage);
}

进程的环境变量是具有可继承性的,即在创建子进程时,是可以同时将环境变量传递给子进程的。在创建子进程的过程中,可以有父进程负责控制子进程,子进程可以继承那些环境变量,一旦子进程创建完毕,父进程即失去对子进程环境变量的控制。实际上,子进程从父进程继承来的环境变量只是父进程环境变量的一个副本,子进程对其环境变量的修改并不会影响到父进程。



返回顶部

发表评论:

Powered By Z-BlogPHP 1.7.3


知识共享许可协议
本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。
网站备案号粤ICP备15104741号-1