一个简单的读取注册表的程序,每次都是“无法获取相应键值”,明明是有那个键值的呀,困惑ing...
#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HKEY hKey;
TCHAR SubKeyName[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
TCHAR ValueName[]="ProductId";
DWORD dwType=REG_SZ;
LPSTR ValueData;
DWORD BufferSize=sizeof(ValueData);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKeyName,0,KEY_READ,&hKey)!=ERROR_SUCCESS)
{
MessageBox(NULL,"无法打开相应子键","Windows产品序列号查看器",MB_OK);
return -1;
}
if(RegQueryValueEx(hKey,ValueName,0,&dwType,(LPBYTE)ValueData,&BufferSize)!=ERROR_SUCCESS)
{
MessageBox(NULL,"无法获取相应键值","Windows产品序列号查看器",MB_OK);
return -1;
}
MessageBox(NULL,ValueData,"Windows产品序列号查看器",MB_OK);
RegCloseKey(hKey);
return 0;
}

解决方案 »

  1.   

    要一层层的打开,用RegOpenKeyEx返回的键值句柄作新的参数,打开下一级。
      

  2.   

    要一层层的打开,用RegOpenKeyEx返回的键值句柄作新的参数,打开下一级。
      

  3.   

    我确实是先用RegOpenKeyEx得到一个hKey再用它作RegQueryValueEx里面的参数的呀。
      

  4.   

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    HKEY hKey;
    TCHAR SubKeyName[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
    TCHAR ValueName[]="ProductId";
    DWORD dwType=REG_SZ;
    char *ValueData=NULL; //改正
    DWORD BufferSize=sizeof(ValueData);
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKeyName,0,KEY_READ,&hKey)!=ERROR_SUCCESS)
    {
    MessageBox(NULL,"无法打开相应子键","Windows产品序列号查看器",MB_OK);
    return -1;
    }
    if(RegQueryValueEx(hKey,ValueName,0,&dwType,(LPBYTE)ValueData,&BufferSize)!=ERROR_SUCCESS)
    {
    MessageBox(NULL,"无法获取相应键值","Windows产品序列号查看器",MB_OK);
    return -1;
    }
    MessageBox(NULL,ValueData,"Windows产品序列号查看器",MB_OK);
    RegCloseKey(hKey);
    return 0;
    }
    如上改正
      

  5.   

    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\";
      

  6.   

    HKEY hKey;
    TCHAR SubKeyName[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
    TCHAR ValueName[]="ProductId";
    DWORD dwType=REG_SZ;
    unsigned char * ValueData[100];
        
    DWORD BufferSize=sizeof(ValueData);
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKeyName,0,KEY_READ,&hKey)!=ERROR_SUCCESS)
    {
    ::MessageBox(NULL,"无法打开相应子键","Windows产品序列号查看器",MB_OK);
    return ;
    }
    if(RegQueryValueEx(hKey,ValueName,0,&dwType,(unsigned char *)ValueData,&BufferSize)!=ERROR_SUCCESS)
    {
    ::MessageBox(NULL,"无法获取相应键值","Windows产品序列号查看器",MB_OK);
    return ;
    }
    ::MessageBox(NULL,(LPCTSTR)ValueData,"Windows产品序列号查看器",MB_OK);

    RegCloseKey(hKey);
    抱歉,刚调试了一下,应该可以
      

  7.   

    unsigned char * ValueData[100];
    哦,多了一个*阿,
    unsigned char  ValueData[100];