win下的所有系统相关信息都能在注册表中找到。环境变量也不例外,就放在“HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment”下。只要操作注册表就可以操作环境变量了。
为此,我实现了两个函数,就可以实现该功能了。
//读
BOOL GetEnvVar(char *VarName,char *VarVal,int *len)
{
HKEY hKey ;
char *lpSubKey = "SYSTEM//CurrentControlSet//Control//Session Manager//Environment";
long rv;
DWORD type,ret = 255;
BYTE tmpbuf[255] = {0};
rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpSubKey,0,KEY_ALL_ACCESS,&hKey);
if(rv != ERROR_SUCCESS)
{
return FALSE;
}
rv = RegQueryValueEx(hKey,VarName,NULL,&type,(BYTE *)tmpbuf,&ret);
RegCloseKey(hKey);
if(rv != ERROR_SUCCESS)
{
return FALSE;
}
if(ret > *len)
{
*len = ret;
return FALSE;
}
memcpy(VarVal,tmpbuf,ret);
return true;
}
//写
BOOL CCheckKeyDlg::AddEnvVar(char *VarName,char *VarVal)
{
HKEY hKey ;
char *lpSubKey = "SYSTEM//CurrentControlSet//Control//Session Manager//Environment";
long rv;
rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpSubKey,0,KEY_ALL_ACCESS,&hKey);
if(rv != ERROR_SUCCESS)
{
return FALSE;
}
rv = RegSetValueEx(hKey,VarName,0,REG_SZ,(BYTE *)VarVal,strlen(VarVal)+1);
RegCloseKey(hKey);
if(rv != ERROR_SUCCESS)
{
return FALSE;
}
return true;
}