#include <iostream>
#include <Windows.h>
using namespace std;
#define E_NO_PARAM 1
#define E_NO_ERROR 0
#define E_READ_FAILED -1
#define E_CLOSE_FAILDE 2
#define E_EXSITE 3
int _tmain(int argc, _TCHAR* argv[])
{
if ( argc < 2)
{
cout<<"用法:程序名 注册表值"<<endl;
return E_NO_PARAM;
}
HKEY hKey;
char szValue[1024];
char szAddString[1024];
LONG lRet;
DWORD dwSize = 1024;
ZeroMemory(szValue,1024);
ZeroMemory(szAddString,1024);
sprintf(szAddString,argv[1]);
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM//CurrentControlSet//Control//Session Manager//Environment",
0, KEY_ALL_ACCESS, &hKey );
if ( lRet != ERROR_SUCCESS )
{
cout<<"添加注册表失败,请手工添加"<<endl;
return E_READ_FAILED;
}
trace("查找注册表成功");
lRet = RegQueryValueEx(hKey,"path",NULL,NULL,(LPBYTE)szValue,&dwSize);
if ( lRet != ERROR_SUCCESS )
{
cout<<"查询值失败,请手工添加"<<endl;
RegCloseKey(hKey);
return E_READ_FAILED;
}
trace("读取注册表值成功");
trace(szValue);
if ( strstr(szValue,szAddString) != NULL )
{
trace("已经存在该值");
RegCloseKey(hKey);
return E_EXSITE;
}
strcat(szValue,";");
strcat(szValue,szAddString);
trace(szValue);
lRet = RegSetValueEx(hKey,"path",0,REG_EXPAND_SZ,(LPBYTE)szValue,sizeof(szValue)+1 );
if ( lRet != ERROR_SUCCESS )
{
cout<<"添加注册表失败,请手工添加"<<endl;
RegCloseKey(hKey);
return E_READ_FAILED;
}
trace("添加注册表成功");
lRet = RegCloseKey(hKey);
if ( lRet != ERROR_SUCCESS )
{
cout<<"关闭注册表键失败"<<endl;
return E_CLOSE_FAILDE;
}
trace("关闭注册表成功");
return E_NO_ERROR;
}