从 RegQueryValueEx 获取正确的值
我正在尝试使用 RegQueryValueEx
从 Windows 注册表中提取 REG_SZ
类型的值,我得到了该值,只不过它在每个字母之前都充满了奇怪的“\000”。为了向您展示我的意思,这里有一些图片:
我想要的值(它是无线适配器的设备名称)
我得到的值:
这是代码:
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);
}
}
}
由于存在额外的空字符,比较 buffer
和 devName
不会相同。如果我将 buffer 转换为一个字符串,我只得到一个“{”,这是第一个值。我需要获取注册表中 devename
的值,然后才能更改注册表中的“NetworkAddress”。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您使用的是
WCHAR
,我假设您正在使用 Unicode 支持进行编译。如果这是真的,那么buffer
也需要是WCHAR
。Since you are using
WCHAR
, I assume you are compiling with Unicode support. If this is true, then also thebuffer
needs to beWCHAR
.