16,548
社区成员




HKEY hkResult;
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"),
0,
KEY_SET_VALUE | KEY_READ,
&hkResult))
{
MessageBox(_T("访问注册表出错!"));
}
DWORD BufferSize = 8192;
DWORD cbData;
DWORD dwRet;
VOID* PerfData = malloc( BufferSize );
cbData = BufferSize;
dwRet = RegQueryValueEx( hkResult,
_T("Path"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
while (dwRet == ERROR_MORE_DATA)
{
BufferSize += 4096;
PerfData = realloc( PerfData, BufferSize );
cbData = BufferSize;
dwRet = RegQueryValueEx( hkResult,
_T("Path"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
}
MessageBox((LPCTSTR)PerfData);
LPTSTR javaHome = _T(";%JAVA_HOME%\\bin;");
TCHAR *temp = new TCHAR[cbData+sizeof(javaHome)];
_tcscpy_s(temp, cbData, (LPTSTR)PerfData);
LPTSTR path = _tcscat(temp, javaHome);
RegSetValueEx(hkResult,
L"Path",
0,
REG_SZ,
(LPBYTE) path,
_tcsclen(path)*sizeof(TCHAR))
DWORD dwResult;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &dwResult);
delete temp;
BOOL WINAPI SetEnvironmentVariable(
__in LPCTSTR lpName,
__in_opt LPCTSTR lpValue
);
#include <shlwapi.h>
BOOL AddPath(LPCTSTR szPath)
{
CString strKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
HKEY hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0L, KEY_ALL_ACCESS, &hKey);
DWORD dwType = 0, dw = 0;
RegQueryValueEx(hKey, _T("Path"), NULL, &dwType, NULL, &dw);
CString sPath;
LPTSTR lpsz = sPath.GetBufferSetLength(dw);
RegQueryValueEx(hKey, _T("Path"), NULL, &dwType, (BYTE*)lpsz, &dw);
sPath.ReleaseBuffer();
sPath = CString(szPath) + _T(";") + sPath;
RegSetValueEx(hKey, _T("Path"), NULL, REG_EXPAND_SZ,
(BYTE * const)(LPCSTR)sPath, (sPath.GetLength()+1)*sizeof(TCHAR));
RegCloseKey(hKey);
DWORD dwRet;
SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,
(LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000,&dwRet);
return TRUE;
}
//调用
AddPath(_T("c:\\test2"));