1
RegQueryValueExを使用してREG_SZ型のWindowsレジストリから値を抽出しようとしていますが、それは奇妙な "\ 000"ここでの意味いくつかの画像です:私はしたいRegQueryValueExから適切な値を取得
値(これは、ワイヤレスアダプタのデバイス名です)私が得た
値:
時間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の値。
私はコンパイラとしてnetbeansを使用しています(私もQTを使用しているので)、私はユニコードサポートを設定する方法がわかりませんが、ユニコードのためにバッファにnullsがありますか?私はWCHAR型としてバッファを設定する場合、どのように私はバッファとdevnameを比較するのですか? – cftmon
@cftmonはい、あなたはansiバッファにユニコード文字列を入れているので、あなたはnullを受け取ります。 devnameと比較するにはさまざまな方法があります。1. devnameにstd :: wstringを使用します。 2.ユニコード文字列をansiに変換する。 3.最後に 'A'を置いてansi版のレジストリ関数を使うようにします(WCHARの代わりにcharを使います) – Loghorn