7

C ++でWindows 7のレジストリの「(デフォルト)」値を読み取ろうとしていますが、使用しているコードは次のとおりです。

string GetSZValueUnique( HKEY openKey, const char* regkey, const char* keyName )
{
   HKEY hKey = 0;
   BYTE data[512] ;
   DWORD szsize = 512 ;
   string value ;

   LONG retValue = RegOpenKeyEx( openKey, regkey, 0, KEY_READ, &hKey ) ;

   if ( retValue == ERROR_SUCCESS )
   {
        LONG retV = RegQueryValueEx( hKey, keyName, 0, 0, data, &szsize ) ;
        if ( retV == ERROR_SUCCESS )
        {
           char* _value = reinterpret_cast<char*>(data) ;
           value = _value ;

           RegCloseKey (hKey) ;
           return value ;
        }
        else
        {
            char msg[512] ;
            FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
            error_string = &msg[0];
            MessageBox( 0, error_string.c_str(), "Query : GetSZValueUnique", 0 );
        }
    }
    else
    {
        char msg[512] ;
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
        error_string = &msg[0];
        MessageBox( 0, error_string.c_str(), "Open : GetSZValueUnique", 0 );
    }

    RegCloseKey (hKey) ;
    return "" ;
}

そして、これは私が上記の関数を呼び出す方法です:

string ts3 = GetSZValueUnique( HKEY_LOCAL_MACHINE, "SOFTWARE\\TeamSpeak 3 Client\\", "" );
if ( !ts3.empty() )
    MessageBox( 0, ts3.c_str(), "GetSZValueUnique", 0 );

たとえば、「Adobe」、「TrendMicro」、「CheckPoint」、「RegisteredApplications」では機能しますが、「7-Zip」、「RTLSetup」、「Sonic」では機能しません。 「チームスピーク 3 クライアント」

私は今アイデアがありません。誰かが何が悪いのか指摘できますか?

編集:「(デフォルト)」値と他の値でコードをチェックしました。キーが機能しないため、*「if(retValue == ERROR_SUCCESS)」*チェックを通過することはなく、常に「指定されたファイルではありません」 "エラーが見つかりました。キーが機能している場合、「*if ( retValue == ERROR_SUCCESS )*」チェックを通過し、存在する場合は値を返します。存在しない場合は、「指定されたファイルが見つかりません」というエラーメッセージを表示するだけです。

EDIT 2:もう一度確認しました:そして、それが機能するキーには、対応するクローンが SOFTWARE の下の「Wow6432Node」サブキーにあるようです...うーん...どうすれば機能しますか?

4

1 に答える 1

7

フラグを指定できます::

  1. アプリから Wow6432Node キー、つまり32 ビット キーにアクセスする場合は、 RegOpenKeyExの「samDesired」パラメーターの「KEY_WOW64_32KEY 」 。
  2. アプリから通常のキー、つまり64 ビット キーにアクセスする場合は、 RegOpenKeyExの「samDesired」パラメーターの「KEY_WOW64_64KEY 」 。

注:: あなたの疑問は、適切なリンクを含むコメントで @WhozCraig によって既にクリアされています。彼が答えたら、私の答えよりも彼の答えを受け入れてください。

于 2013-02-26T09:35:38.183 に答える