2011-02-08 19 views
1

RegQueryValueExを使用してREG_SZ型のWindowsレジストリから値を抽出しようとしていますが、それは奇妙な "\ 000"ここでの意味いくつかの画像です:私はしたいRegQueryValueExから適切な値を取得

値(これは、ワイヤレスアダプタのデバイス名です)私が得た enter image description here

値:

enter image description here

時間ERESコード:

HKEY hlistkey = NULL; 
    HKEY hkey = NULL; 

    int dwIndex=0; 

    string devName = returndevName(); //return current selected device name using iphlpapi.h 
    WCHAR KeyNameBuf[512]; 
    DWORD keyNameSizBuf = 512; 

    char buffer[512]; 


    RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}") ,0,KEY_READ, &hlistkey); 
    if(!hlistkey) 
    { 
     cout << "failed" << endl; 
    } 
    while(RegEnumKeyEx(hlistkey,dwIndex++,KeyNameBuf,&keyNameSizBuf,0,NULL,NULL,NULL) == ERROR_SUCCESS) 
    { 

     RegOpenKeyEx(hlistkey, KeyNameBuf, 0, KEY_READ | KEY_SET_VALUE, &hkey); 
     if(hkey) 
     { 
      keyNameSizBuf = 512; 
      if(RegQueryValueEx(hkey,TEXT("NetCfgInstanceId"), 0,NULL,(LPBYTE)buffer,&keyNameSizBuf) == ERROR_SUCCESS) 
      { 
       if(strcmp(buffer,devName.c_str()) ==0) 
       { 
        //set value here 
       } 
      } 
      RegCloseKey(hkey); 
     }   
    } 
} 

バッファとDEVNAMEを比較するために、私は単に「{」最初value.iであるが、取得する必要がありました文字列にバッファをキャスト.IF余分なヌルのと同じではないでしょう私はレジストリの "NetworkAddress"を変更する前に、レジストリのdevicenameの値。

答えて

5

WCHARを使用しているので、私はあなたがUnicodeサポートでコンパイルしていると仮定します。これが当てはまる場合は、bufferWCHARである必要があります。

+0

私はコンパイラとしてnetbeansを使用しています(私もQTを使用しているので)、私はユニコードサポートを設定する方法がわかりませんが、ユニコードのためにバッファにnullsがありますか?私はWCHAR型としてバッファを設定する場合、どのように私はバッファとdevnameを比較するのですか? – cftmon

+0

@cftmonはい、あなたはansiバッファにユニコード文字列を入れているので、あなたはnullを受け取ります。 devnameと比較するにはさまざまな方法があります。1. devnameにstd :: wstringを使用します。 2.ユニコード文字列をansiに変換する。 3.最後に 'A'を置いてansi版のレジストリ関数を使うようにします(WCHARの代わりにcharを使います) – Loghorn

関連する問題