很多时候需要解析和设置环境变量,如解析磁盘的当前路径,父进程设置当前路径环境变量以便更改子进程的当前目录,子进程从环境变量中获得父进程传递的参数等等。这里封装了一个解析和设置环境变量供有需要的人使用。

说明

环境变量的使用通常分为两种:
1.解析GetEnvironmentStrings获得环境变量块,这通常需要自己去遍历解析
2.设置、获得、删除指定键的环境变量,这可以借助Windows API来完成
本封装类,提供了这两种操作的封装:
对于第一种直接调用EnumEnv可以将解析的值保存到map中或调用回调函数自定义处理。
对于第二种封装Windows API,更加方便使用。

使用示例

//设置回调处理函数
void WINAPI FuncEnum(CString csKey, CString csValue)
{
    wcout << csKey.GetBuffer() << L" => " << csValue.GetBuffer() << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "chs");

    map<CString, CString> mapEnv;
    CEnvVarParser envVar;
    int nCntEnv;

    //遍历环境演示
    wcout << L"遍历环境演示" <<endl;
    bool bRet = envVar.EnumEnv(&mapEnv, FuncEnum, &nCntEnv, true);

    wcout << endl 
          << L"Total count: " << nCntEnv << endl; 
    wcout << L"Enum Result: " << bRet << endl;

    //设置、获得、删除环境变量演示
    wcout << endl 
          << L"设置、获得、删除环境变量演示" << endl;
    TCHAR szValue[MAX_VALUE_LEN];
    CString csValue;

    envVar.SetEnv(L"Jim Wen", L"Set Env Var 设置环境变量");
    envVar.GetEnv(L"Jim Wen", csValue);
    wcout << L"Get Jim Wen" << L" => " << envVar.GetEnv(L"Jim Wen", csValue) << endl;
    wcout << L"Jim Wen"        << L" => " << csValue.GetBuffer() << endl;

    envVar.DeleteEnv(L"Jim Wen");
    wcout << L"Get Jim Wen" << L" => " << envVar.GetEnv(L"Jim Wen", csValue) << endl;

    //展开环境变量演示
    wcout << endl 
          << L"展开环境变量演示" << endl;
    envVar.ExpandEnv(L"%appdata%", csValue);
    wcout << L"Expand of %appdata% is: " << csValue.GetBuffer() << endl;
    return 0;
}

输出结果如下

遍历环境演示
:: => ::\
C: => c:\Users\Administrator\Desktop\环境变量解析和设置\CEnvironmentVar
ALLUSERSPROFILE => C:\ProgramData
APPDATA => C:\Users\Administrator\AppData\Roaming
CommonProgramFiles => C:\Program Files (x86)\Common Files
CommonProgramFiles(x86) => C:\Program Files (x86)\Common Files
CommonProgramW6432 => C:\Program Files\Common Files
COMPUTERNAME => QIHUQIH-I5QE4NK
ComSpec => C:\Windows\system32\cmd.exe
DRVDIR => C:\DRV
FP_NO_HOST_CHECK => NO
.........

Total count: 57
Enum Result: 1

设置、获得、删除环境变量演示
Get Jim Wen => 1
Jim Wen => Set Env Var 设置环境变量
Get Jim Wen => 0

展开环境变量演示
Expand of %appdata% is: C:\Users\Administrator\AppData\Roaming

下载

源码下载链接