主题:注册表问题
我编写了一个查询和修改主机名的对话框,是通过修改注册表来修改主机名的,从对话框上的一个编辑框里面读入一个字符窜,然后通过修改注册表来实现!但我写的代码能打开注册表,但不能够设置相应的键值!
主代码如下:
void CIpDlg::OnBtnModify()
{
// TODO: Add your control notification handler code here
UpdateData();
//int num;
LPBYTE hostname_Set=CString_To_LPBYTE(m_hostname);
DWORD type_1=REG_SZ;
DWORD cbData_1=m_hostname.GetLength()+1;
LONG lRtn;
HKEY hMainKey;
TCHAR szParameters[256];
//修改主机名
_tcscpy(szParameters,_T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"));
lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,szParameters,0,KEY_WRITE,&hMainKey);
if(lRtn==ERROR_SUCCESS)
{
long ret1=::RegSetValueEx(hMainKey, _T("NV Hostname"), 0, type_1, hostname_Set, cbData_1);
if(ret1=ERROR_SUCCESS)
{
MessageBox("修改成功!");
}
else
{
MessageBox("错误: 无法修改有关注册表信息!");
::RegCloseKey(hMainKey);
return;
}
}
::RegCloseKey(hMainKey);
}
LPBYTE CIpDlg::CString_To_LPBYTE(CString str)
{
LPBYTE lpb=new BYTE[str.GetLength()+1];
for(int i=0;i<str.GetLength();i++)
*(lpb+i) = str.GetAt(i);
*(lpb+i) = '\0';
return lpb;
}
望高手指点一下!谢谢!
主代码如下:
void CIpDlg::OnBtnModify()
{
// TODO: Add your control notification handler code here
UpdateData();
//int num;
LPBYTE hostname_Set=CString_To_LPBYTE(m_hostname);
DWORD type_1=REG_SZ;
DWORD cbData_1=m_hostname.GetLength()+1;
LONG lRtn;
HKEY hMainKey;
TCHAR szParameters[256];
//修改主机名
_tcscpy(szParameters,_T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"));
lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,szParameters,0,KEY_WRITE,&hMainKey);
if(lRtn==ERROR_SUCCESS)
{
long ret1=::RegSetValueEx(hMainKey, _T("NV Hostname"), 0, type_1, hostname_Set, cbData_1);
if(ret1=ERROR_SUCCESS)
{
MessageBox("修改成功!");
}
else
{
MessageBox("错误: 无法修改有关注册表信息!");
::RegCloseKey(hMainKey);
return;
}
}
::RegCloseKey(hMainKey);
}
LPBYTE CIpDlg::CString_To_LPBYTE(CString str)
{
LPBYTE lpb=new BYTE[str.GetLength()+1];
for(int i=0;i<str.GetLength();i++)
*(lpb+i) = str.GetAt(i);
*(lpb+i) = '\0';
return lpb;
}
望高手指点一下!谢谢!