HKEY m_Key;
CString m_SystemRoot;
CString m_sKeyPath;
m_sKeyPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
if(RegOpenKey(HKEY_local_MACHINE,m_sKeyPath,&m_Key)!=0 && RegOpenKey(HKEY_local_MACHINE,m_sKeyPath,&m_Key)! =ERROR_SUCCESS)
{}
else
{
 unsigned char m_Data[80];
 DWORD TYPE(0);
 DWORD cbData(80);
 memset(m_Data,0,sizeof(m_Data));
 ::RegQueryValueEx(m_Key,"ABC",0,&TYPE,m_Data,&cbData);
 m_SystemRoot.Format("%s",m_Data);
 AfxMessageBox(m_SystemRoot);
}
::RegCloseKey(m_Key);我在读取注册表中信息时为什么读出来的为空?ABC中是非空的

解决方案 »

  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;
      

  2.   

    先判断读是否成功了,没有成功的话,使用GetLastError看看错误号
    RegOpenKey(HKEY_local_MACHINE,m_sKeyPath,&m_Key)!=0   &&   RegOpenKey(HKEY_local_MACHINE,m_sKeyPath,&m_Key)!   =ERROR_SUCCESS你这句看着很奇怪啊