基本概念
GetEnvironmentVariable属于Windows.h头文件,专门用于读取指定名称的环境变量值,可以替代ExpandEnvironmentStrings中 “被动解析环境变量” 的方式,主动获取单个环境变量的具体值,灵活性更高。
基本语法
1 2 3 4 5 6 7 8 9 10 11
| DWORD GetEnvironmentVariableW( [in, optional] LPCWSTR lpName, [out, optional] LPWSTR lpBuffer, [in] DWORD nSize );
DWORD GetEnvironmentVariableA( [in, optional] LPCSTR lpName, [out, optional] LPSTR lpBuffer, [in] DWORD nSize );
|
返回值
成功:返回复制到缓冲区的字符数(ANSI是字节数,Unicode是wchar_t字符数),不包含终止符\0。
失败:
返回0:表示指定的环境变量不存在(可通过GetLastError()验证,错误码为ERROR_ENVVAR_NOT_FOUND);
返回值> nSize:表示缓冲区太小,返回值为存储该变量值所需的最小字节数(包含\0)。
简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #include <Windows.h> #include <wchar.h>
int main() { LPCWSTR szVarName = L"TEMP"; DWORD dwRequiredSize = 0;
dwRequiredSize = GetEnvironmentVariableW(szVarName, NULL, 0); if (dwRequiredSize == 0) { DWORD dwError = GetLastError(); if (dwError == ERROR_ENVVAR_NOT_FOUND) { wprintf(L"环境变量 %s 不存在\n", szVarName); } else { wprintf(L"获取缓冲区大小失败,错误码:%d\n", dwError); } return 1; }
DWORD dwBufferSize = dwRequiredSize * sizeof(wchar_t); wchar_t* szVarValue = new wchar_t[dwRequiredSize]; if (szVarValue == NULL) { wprintf(L"内存分配失败\n"); return 1; }
DWORD dwResult = GetEnvironmentVariableW(szVarName, szVarValue, dwRequiredSize); if (dwResult > 0 && dwResult < dwRequiredSize) { wprintf(L"环境变量 %s 的值:%s\n", szVarName, szVarValue); } else { wprintf(L"读取环境变量失败,返回值:%d\n", dwResult); delete[] szVarValue; return 1; }
wchar_t szUserName[MAX_PATH] = { 0 }; dwResult = GetEnvironmentVariableW(L"USERNAME", szUserName, MAX_PATH); if (dwResult > 0 && dwResult < MAX_PATH) { wprintf(L"\n环境变量 USERNAME 的值:%s\n", szUserName); } else if (dwResult == 0) { wprintf(L"\nUSERNAME 环境变量不存在\n"); } else { wprintf(L"\n缓冲区不足,所需大小:%d 字符\n", dwResult); }
wchar_t szInvalidVar[MAX_PATH] = { 0 }; dwResult = GetEnvironmentVariableW(L"INVALID_VAR_NAME", szInvalidVar, MAX_PATH); if (dwResult == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { wprintf(L"\n环境变量 INVALID_VAR_NAME 不存在(验证失败场景)\n"); }
delete[] szVarValue; return 0; }
|