c++代码实现环境变量的修改

Home / C++ MrLee 2016-11-20 3221

HKEY hkResult;//键的句柄
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T('SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment'), 0, KEY_SET_VALUE | KEY_READ, &hkResult)) //打开键environment
{
AfxMessageBox(_T('访问注册表出错!'));
}
DWORD BufferSize = 8192; //数据长度
DWORD cbData; ////数据长度
DWORD dwRet;
VOID* PerfData = malloc( BufferSize );//数据存放地址
cbData = BufferSize;
dwRet = RegQueryValueEx( hkResult, _T('OSG_webpath'), NULL, NULL, (LPBYTE) PerfData, &cbData ); //读取某子键下特定名称的值
while (dwRet == ERROR_MORE_DATA)
{
BufferSize += 4096;
PerfData = realloc( PerfData, BufferSize );
cbData = BufferSize;
dwRet = RegQueryValueEx( hkResult, _T('OSG_webpath'),NULL,NULL,(LPBYTE) PerfData, &cbData );
}
//AfxMess ageBox((LPCTSTR)PerfData);
if (dwRet!=ERROR_SUCCESS)//名称不存在时,添加这个名称并设定其值
{
LPTSTR javaHome = _T('F:\\test');
//TCHAR *temp = new TCHAR[cbData+sizeof(javaHome)];
//_tcscpy_s(temp, cbData, (LPTSTR)PerfData);
//LPTSTR path = _tcscat(temp, javaHome); //类似memcpy
RegSetValueEx(hkResult,_T('OSG_webpath'),0, REG_EXPAND_SZ, (LPBYTE) javaHome,_tcsclen(javaHome)*sizeof(TCHAR));//设置某子键下特定名称的值。
DWORD dwResult;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM('Environment'), SMTO_ABORTIFHUNG, 5000, &dwResult);//广播立即执行
//delete temp;
AfxMessageBox(_T('环境变量OSG_webpath设置完成!'));
}
else
{
AfxMessageBox(_T('环境变量OSG_webpath已存在!'));
}
RegCloseKey(hkResult);//释放键句柄

 

本文链接:https://www.it72.com/11228.htm

推荐阅读
最新回复 (0)
返回