请教高手如何编写程序修改注册表中的信息
由于服务器地址的改变,需要把用户原来安装的客户端程序的连接IP进行修改,希望编写一程序批量处理,减少用户的操作,该IP地址的信息是存放在注册表中的。
请高手举例说明,谢谢。
问题点数:100、回复次数:4Top
1 楼laodie(张三)回复于 2003-08-04 23:33:37 得分 90
//这两个方法分别是读取和设置注册表的,你改一下试试。
void CRegistryView::OnButton1()
{
// TODO: Add your control notification handler code here
HKEY hKEY;
LPCTSTR path="Software\\Microsoft\\MS Setup (ACME)\\User Info";
long ret=::RegOpenKeyEx(HKEY_CURRENT_USER,path, 0, KEY_READ,&hKEY);
/* LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ret,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
*/
if(ret!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 查询无法打开有关的hKEY!");
return;
}
unsigned char tmp[256]="\0";
DWORD type=REG_SZ;
DWORD size=80;
ret=::RegQueryValueEx(hKEY,"DefName", NULL,&type,tmp,&size);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误:无法查询有关注册表信息!");
return;
}
CString tmpstring=CString(tmp);
//AfxMessageBox(tmpstring);
SetDlgItemText(IDC_EDIT1,tmpstring);
::RegCloseKey(hKEY);
}
void CRegistryView::OnButton2()
{
// TODO: Add your control notification handler code here
unsigned char tmp[256];
CString tmpstring1;
if(!GetDlgItemText(IDC_EDIT1,tmpstring1))
{
MessageBox("错误:请输入正确信息!");
}
sprintf((char *)tmp,"%s",tmpstring1);
CString tmpstring=tmp;
HKEY hKEY;
DWORD type=REG_SZ;
DWORD size=tmpstring.GetLength()+1;
LPCTSTR path="Software\\Microsoft\\MS Setup (ACME)\\User Info" ;
long ret=::RegOpenKeyEx(HKEY_CURRENT_USER,path,0,KEY_WRITE, &hKEY);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误: 修改无法打开有关的hKEY!");
return;
}
ret=::RegSetValueEx(hKEY,"DefName",NULL,type,tmp,size);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
return;
}
::RegCloseKey(hKEY);
}Top
2 楼GUID(全世界我最菜)回复于 2003-08-05 08:47:26 得分 0
来晚了,RegOpenKeyExTop
3 楼iicup(双杯献酒)回复于 2003-08-05 08:53:11 得分 0
关于注册表操作,
详细内容在:
MSDN\Platform SDK\Base Services\RegistryTop
4 楼awnucel(西大耻犹未雪,南京恨何时灭&抵制日货)回复于 2003-08-05 09:17:24 得分 10
来晚了,就 COPY一下
//这两个方法分别是读取和设置注册表的,你改一下试试。
void CRegistryView::OnButton1()
{
// TODO: Add your control notification handler code here
HKEY hKEY;
LPCTSTR path="Software\\Microsoft\\MS Setup (ACME)\\User Info";
long ret=::RegOpenKeyEx(HKEY_CURRENT_USER,path, 0, KEY_READ,&hKEY);
/* LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ret,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
*/
if(ret!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 查询无法打开有关的hKEY!");
return;
}
unsigned char tmp[256]="\0";
DWORD type=REG_SZ;
DWORD size=80;
ret=::RegQueryValueEx(hKEY,"DefName", NULL,&type,tmp,&size);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误:无法查询有关注册表信息!");
return;
}
CString tmpstring=CString(tmp);
//AfxMessageBox(tmpstring);
SetDlgItemText(IDC_EDIT1,tmpstring);
::RegCloseKey(hKEY);
}
void CRegistryView::OnButton2()
{
// TODO: Add your control notification handler code here
unsigned char tmp[256];
CString tmpstring1;
if(!GetDlgItemText(IDC_EDIT1,tmpstring1))
{
MessageBox("错误:请输入正确信息!");
}
sprintf((char *)tmp,"%s",tmpstring1);
CString tmpstring=tmp;
HKEY hKEY;
DWORD type=REG_SZ;
DWORD size=tmpstring.GetLength()+1;
LPCTSTR path="Software\\Microsoft\\MS Setup (ACME)\\User Info" ;
long ret=::RegOpenKeyEx(HKEY_CURRENT_USER,path,0,KEY_WRITE, &hKEY);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误: 修改无法打开有关的hKEY!");
return;
}
ret=::RegSetValueEx(hKEY,"DefName",NULL,type,tmp,size);
if(ret!=ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
return;
}
::RegCloseKey(hKEY);
}
Top



