本帖最后由 qq534888799 于 2011-12-01 08:01:13 编辑

解决方案 »

  1.   

    DWORD keylen = sizeof(subkey); //设置键实际长度
    改成 DWORD keylen = sizeof(subkey)+1; 
      

  2.   

    不行,还是老问题,不过这次是在While循环里面做死循环不出来了
      

  3.   

    1.
    if(::RegOpenKeyEx(hkey,subkey,0,KEY_WRITE,&h_key) == ERROR_SUCCESS)
    {
    EnumerateKeyE(h_key,subkey);这里的h_key已经是用subkey打开过的, 所以已经包含了subkey的路径,EnumerateKeyE(h_key,subkey) 就不对了
    2. ::RegEnumKeyEx(hkey,Index,subkey,&keylen,0,0,0,0) != ERROR_NO_MORE_ITEMSRegEnumKeyEx可能返回其他错误, 最好不要这么判断
      

  4.   


    BOOL GetComputerSetupSoftWareTxt()
    {
    const int  MAX_LEG = 256 * sizeof(TCHAR);
    HKEY hKey;
    DWORD dwRegNum = MAX_LEG;
    TCHAR regBufferName[MAX_LEG] = {0};
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),NULL, KEY_READ, &hKey) == ERROR_SUCCESS )
    {
    if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwRegNum, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
    {
    for(int i = 0; i < (int)dwRegNum; i++)
    {
    DWORD dwRegSize = MAX_LEG;
    RegEnumKeyEx(hKey, i, regBufferName, &dwRegSize, NULL, NULL, NULL, NULL);
    DWORD dwType;
    HKEY hSubKey;
    if( RegOpenKeyEx(hKey, regBufferName, NULL, KEY_READ, &hSubKey) == ERROR_SUCCESS)
    {
    TCHAR regBufferValue[MAX_LEG] = {0};
    dwRegSize = MAX_LEG;
    RegQueryValueEx(hSubKey, _T("DisplayName"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
    string displayName = regBufferValue; 
    if(displayName == _T(""))
    {
    continue;
    }
    _tcscpy_s(regBufferValue, _T(""));
    RegQueryValueEx(hSubKey, _T("ParentKeyName"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
    string softwareType = regBufferValue;

    }
    }
    }
    else 
    {
    return FALSE; //打开键失败
    }
    RegCloseKey(hKey);
    return TRUE;
    }
      

  5.   

    1.
    if(::RegOpenKeyEx(hkey,subkey,0,KEY_WRITE,&h_key) == ERROR_SUCCESS)
    {
    EnumerateKeyE(h_key,subkey);这里的h_key已经是用subkey打开过的, 所以已经包含了subkey的路径,EnumerateKeyE(h_key,subkey) 就不对了
    2. ::RegEnumKeyEx(hkey,Index,subkey,&keylen,0,0,0,0) != ERROR_NO_MORE_ITEMSRegEnumKeyEx可能返回其他错误, 最好不要这么判断