下面这段代码是我在借鉴别人的,查看CPU信息的,是一个对话框工程,在vc6.0下运行成功,在文本控件里能正常显示出来,但是到了vc2005里,我把参数设置正确后,打开注册表那步就不成功,然后我试所有我知道函数和方法,都不成功,恳请大家谁会,帮个忙?说说原因,或者给个成功在05下运行的例子~
CRegKey rk;
HKEY m_hKey;
DWORD pCount=1024;
CString KeyValue;
char szValue[1024];

LPCTSTR lp="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";

if(rk.Open(HKEY_LOCAL_MACHINE,lp)== ERROR_SUCCESS)

{
LPCTSTR lKeyName="ProcessorNameString";
if(rk.QueryValue(szValue,lKeyName,& pCount)== ERROR_SUCCESS)


{
KeyValue=szValue;
KeyValue.Replace("   ","");
SetDlgItemText(IDC_CPUINFO,"CPU信息:"+KeyValue);
}
else

{
 SetDlgItemText(IDC_CPUINFO,"Query error");
}
//rk.SetValue(lKeyName,"HH");
}
else
{
SetDlgItemText(IDC_CPUINFO,"Open error");
}

    rk.Close();

解决方案 »

  1.   


    下面的列子实现了读注册表的计算机用户名,然后写入文件的功能。 1、读取注册表直接用了   API   函数; 2、写文件用了   MFC   的   CFile   类; 3、读取了注册表键   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows   NT\CurrentVersion 4、例子比较简单,没有判断所有函数的返回值; 5、Win2000   +   VC6   测试通过。
    HKEY hKey;
    LONG nResult = 0;
    DWORD dwSize = 0;    // 数据长度TCHAR lpSubKey[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
    TCHAR lpValueName[] = _T("RegisteredOwner");///////////////nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,    // 主键
        lpSubKey,    // 子键
        NULL,
        KEY_READ,    // 权限
        &hKey);        // Handleif( nResult != ERROR_SUCCESS )
    {
        MessageBox("打开键错误");
        return;
    }///////////////////// 第一次调用,获取数据长度
    RegQueryValueEx(hKey,
        lpValueName,
        NULL,
        NULL,
        NULL,
        &dwSize);            // 缓冲区长度// 动态分配缓冲区
    LPBYTE dataBuf = new BYTE[dwSize];// 第二次调用,获取数据
    RegQueryValueEx(hKey,
        lpValueName,
        NULL,
        NULL,
        dataBuf,
        &dwSize);// 关闭
    RegCloseKey(hKey);// 写文件
    CFile f( "e:\\test.txt" ,
        CFile::modeCreate | CFile::modeWrite );f.Write(dataBuf, dwSize);
    f.Close();// 释放缓冲区
    delete[] dataBuf;