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 때문에 나는 단순히 가지고 문자열로 버퍼를 캐스팅 .if 여분의 널 (null)의 동일하지 않을 것 "{"처음 value.i 인 얻을 필요 내가 레지스트리에서 "NetworkAddress"를 변경할 수 있기 전에 레지스트리에있는 devicename의 값.
나는 Qing을 사용하고 있기 때문에 Mingw와 함께 netbeans를 사용하고 있는데, 유니 코드 지원을 설정하는 방법을 모르겠지만 유니 코드 때문에 버퍼에 널 (null)이 있습니까? WCHAR 형식으로 버퍼를 설정하면 버퍼를 devname과 어떻게 비교할 수 있습니까? – cftmon
@cftmon 예, ansi 버퍼에 유니 코드 문자열을 넣기 때문에 널 (null)을 얻습니다. devname과 비교하는 방법은 여러 가지가 있습니다. 1. devname에 std :: wstring을 사용하십시오. 2. 유니 코드 문자열을 ansi로 변환합니다. 3. ansi 버전의 레지스트리 함수를 강제로 사용하고 끝에 A를 붙이십시오 (WCHAR 대신 char을 사용하십시오) – Loghorn