GUI程序和CUI程序各自如何获取进程的环境变量

来源:互联网 发布:淘宝香火符咒 编辑:程序博客网 时间:2024/05/16 15:34

GUI程序获取方法:

void Ctest1Dlg::DumpEnvironmentStrings(){// 获取完整的环境块PTSTR pEnvBlock = GetEnvironmentStrings();// 将pEnvBlock变量的值备份到的pszCurrent中目的://a、用pEnvBlock释放该内存块。如果pEnvBlock的值被改变了,就没法释放该内存,因为找不到内存的起始地址//b、用pszCurrent来遍历环境变量PTSTR pszCurrent = pEnvBlock;HRESULT hResult = S_OK;PCTSTR pszPos = NULL;int current = 0;while (pszCurrent != NULL){// 过滤掉不属于环境变量的字符串// 为什么要用“=”来判断当前字符串是否是环境变量?// 答:因为环境变量是以“变量名=变量值”形式存在的,不会以“=”开头,所以可以用这个办法来判断if (*pszCurrent != _T('=')) // 打印环境变量{TRACE(pszCurrent);//  在调试窗口下可以看到打印出来的环境变量以及对应的值(格式为:变量名=变量值)TRACE(_T("\r\n"));}else // 打印非环境变量{TRACE(pszCurrent);TRACE(_T("\r\n"));}// 遍历下一个变量++current;// 移动到字符串的末尾while (*pszCurrent != _T('\0'))++pszCurrent;++pszCurrent;// 检查释放是最后的字符串if (*pszCurrent == _T('\0'))break;}// 释放环境块FreeEnvironmentStrings(pEnvBlock);}


CUI程序获取的方法:

#include "stdafx.h"#include <stdlib.h>#include <Windows.h>void DumpEnvVariables(PTSTR pEnvBlock[]){PTSTR* pElement = (PTSTR*)pEnvBlock;while (*pElement != NULL){_tprintf(_T("%s\r\n"), *pElement);// 向控制台窗口输出环境变量(格式:变量名=变量值)++pElement;}}//     建立控制台程序是,编译器默认情况下只生成前两个参数,env参数是我手动添加的,// 该参数存储的就是当前进程的环境变量,通过解析该变量的值,就可以得到环境变量的值int _tmain(int argc, _TCHAR* argv[], TCHAR* env[]){DumpEnvVariables(env);system("pause");return 0;}


0 0