This is a hack I did for a similar type of program (my PATH environment variable is a mess and this is the only way to keep it straight... )
void CEnvironDlg::LoadUserSettings()
{
m_UserRegItems.RemoveAll();
HKEY hEnviron;
long ret = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Environment"), 0, KEY_READ, &hEnviron);
if (ret != ERROR_SUCCESS)
return;
DWORD index = 0;
for (;; )
{
TCHAR szValueName[256];
DWORD cbValue = 256;
BYTE szData[1024];
DWORD cbData = 1024;
DWORD dwType;
if (RegEnumValue(hEnviron, index, szValueName, &cbValue, NULL, &dwType, szData, &cbData) != ERROR_SUCCESS)
break;
m_UserRegItems.Add(CRegItem(szValueName, dwType, szData, cbData));
index ++;
}
RegCloseKey(hEnviron);
}
void CEnvironDlg::WriteUserSettings()
{
long ret;
int i, c;
HKEY hEnviron;
ret = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Environment"), 0, KEY_ALL_ACCESS, &hEnviron);
if (ret != ERROR_SUCCESS)
return;
DWORD index = 0;
for (;; )
{
TCHAR szValueName[256];
DWORD cbValue = 256;
BYTE szData[1024];
DWORD cbData = 1024;
DWORD dwType;
if (RegEnumValue(hEnviron, index, szValueName, &cbValue, NULL, &dwType, szData, &cbData) != ERROR_SUCCESS)
break;
ret = RegDeleteValue(hEnviron, szValueName);
}
if (ret == 0)
{
c = m_UserRegItems.GetSize();
for (i = 0; i < c; i ++)
{
CRegItem item = m_UserRegItems[i];
if ((ret = RegSetValueEx(hEnviron, item.szValue, NULL, item.dwType, item.bData, item.cbData)) != ERROR_SUCCESS)
TRACE("RegSetValue error with %s (ret=%d)\n", item.szValue, ret);
}
}
RegCloseKey(hEnviron);
}
void CEnvironDlg::LoadSystemSettings()
{
m_SystemRegItems.RemoveAll();
HKEY hEnviron;
long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\ControlSet001\\Control\\Session Manager\\Environment", 0, KEY_READ, &hEnviron);
if (ret != ERROR_SUCCESS)
return;
DWORD index = 0;
for (;; )
{
TCHAR szValueName[256];
DWORD cbValue = 256;
BYTE szData[1024];
DWORD cbData = 1024;
DWORD dwType;
if (RegEnumValue(hEnviron, index, szValueName, &cbValue, NULL, &dwType, szData, &cbData) != ERROR_SUCCESS)
break;
m_SystemRegItems.Add(CRegItem(szValueName, dwType, szData, cbData));
index ++;
}
RegCloseKey(hEnviron);
}
void CEnvironDlg::WriteSystemSettings()
{
long ret;
int i, c;
HKEY hEnviron;
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\ControlSet001\\Control\\Session Manager\\Environment", 0, KEY_ALL_ACCESS, &hEnviron);
if (ret != ERROR_SUCCESS)
return;
DWORD index = 0;
for (;; )
{
TCHAR szValueName[256];
DWORD cbValue = 256;
BYTE szData[1024];
DWORD cbData = 1024;
DWORD dwType;
if (RegEnumValue(hEnviron, index, szValueName, &cbValue, NULL, &dwType, szData, &cbData) != ERROR_SUCCESS)
break;
ret = RegDeleteValue(hEnviron, szValueName);
}
if (ret == 0)
{
c = m_SystemRegItems.GetSize();
for (i = 0; i < c; i ++)
{
CRegItem item = m_SystemRegItems[i];
if ((ret = RegSetValueEx(hEnviron, item.szValue, NULL, item.dwType, item.bData, item.cbData)) != ERROR_SUCCESS)
TRACE("RegSetValue error with %s (ret=%d)\n", item.szValue, ret);
}
}
RegCloseKey(hEnviron);
}
|