回 帖 发 新 帖 刷新版面

主题:注册表问题

我编写了一个查询和修改主机名的对话框,是通过修改注册表来修改主机名的,从对话框上的一个编辑框里面读入一个字符窜,然后通过修改注册表来实现!但我写的代码能打开注册表,但不能够设置相应的键值!
主代码如下:
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;
}
望高手指点一下!谢谢!

回复列表 (共2个回复)

沙发

是运行失败??还是改了没有产生效果??
没有细看你的代码,
你看一下你的权限够吗?如果权限不够的话也很可能运行失败.

板凳

问题已经解决,犯了一个低级的错误!
还有一个问题,当我修改网卡的IP的时候,注册表中IP类型是REG_MULTI_SZ,我有个CString类型的字符串,里面存放的是一个IP地址,我怎么把CString类型转换成REG_MULTI_SZ需要的类型呢?用上面的函数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;
}
转成LPBYTE的时候,能读进去,但在修改后的IP值后面无故出现了很多乱码,不知道是什么原因,希望了解这些的高手们给点指点,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册