void CWarHDlg::OnBnClickedSetname()
{
// TODO: 在此添加控件通知处理程序代码
wchar_t buf[16];
char mbuf[32];

GetDlgItemTextW(IDC_NAME, buf, sizeof(buf)); WideCharToMultiByte(CP_UTF8, 0, buf, sizeof(buf) / sizeof(wchar_t), mbuf, sizeof(buf) / sizeof(wchar_t) + sizeof(buf), NULL, NULL);   HKEY hNameKey = NULL;
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Blizzard Entertainment\\Warcraft III\\String"), 
0, KEY_WRITE|KEY_READ, &hNameKey) == ERROR_SUCCESS)
{
if (RegSetValueExA(hNameKey, "userlocal", NULL, REG_SZ,
(LPBYTE)mbuf, strlen(mbuf)) == ERROR_SUCCESS)
{
MessageBox(_T("修改成功!"), _T("Messae:"), MB_OK);
}
}
if (hNameKey != NULL)
RegCloseKey(hNameKey);
}
//注: 是关于<<魔兽争霸3>>中 使用中文名字的主要代码
上面的代码是把 buf 的内容写入注册表使用 RegSetValueExW
如果buf的内容为: 0xE8 0x80 0x81 0xE7 0x8E 0x8B  --------->  0xE8 0x80 0x81 0xE7 0x8E 0x8B  使用 RegSetValueExA
如果buf的内容为: 0xE8 0x80 0x81 0xE7 0x8E 0x8B  --------->  0x70 0x94 0x7A 0x4F 0x07 0x5E  0xC0 0xCF 0xCD 0xF5 (中文为: 老王)       //编辑控件
---> WideCharToMultiByte
0xE8 0x80 0x81 0xE7 0x8E 0x8B           //多字节
---> RegSetValueExA
0x70 0x94 0x7A 0x4F 0x07 0x5E           //注册表谁能帮我解释上面的转化过程.

解决方案 »

  1.   

        TCHAR mbuf[32];
        
        GetDlgItemText(IDC_NAME, mbuf, sizeof(mbuf));
        HKEY hNameKey = NULL;
        if ( RegOpenKeyEx( HKEY_CURRENT_USER, _T("Software\\Blizzard Entertainment\\Warcraft III\\String"), 
            0, KEY_WRITE|KEY_READ, &hNameKey ) == ERROR_SUCCESS )
        {
            if ( RegSetValueEx( hNameKey, _T("userlocal"), NULL, REG_SZ,
                (LPBYTE)mbuf, strlen(mbuf) ) == ERROR_SUCCESS)
            {
                MessageBox(_T("修改成功!"), _T("Messae:"), MB_OK);
            }
        }
        if (hNameKey != NULL)
            RegCloseKey(hNameKey);
      

  2.   

    上面的代码,是你的项目什么码就什么码;你可以修改为多字节、UNICODE、不设置等来看效果。