我需要访问“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\USB”下的所有子键,使用RegOpenKeyEx访问的时候,发现有些键能打开,有些却不能,返回2,我查过,表示键值不存在,但键值其实是存在的。其他键用同样的方式都能顺利访问,非常不解。LONG ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Enum\\USB\\Vid_0a12&Pid_0001", 0, KEY_READ, &hkey);上面是我访问所用的代码。麻烦各位指点一二。
解决方案 »
- png图片加载到背景bmp上//为什么要把bmp与png拷贝到cdc里//然后拷贝OnEraseBkgnd(CDC* pDC)的pDC里才能显示透明效果?
- Image *image1;如何判断这个指针是否有内容
- 请问往对话框上写字符的问题
- 双缓冲绘图的问题
- 完成端口一些迷惑,高手进来指点一下吧
- 谢谢,如何得到桌面的墙纸信息!
- 为什么我会出现这种错误啊!!
- CDialog 属性设为Styles->Border->Resizing,对话框左上角出现Windows图标.怎样去掉或换为我自己的图标?
- 串口通信 len太短咋办
- CGridCtrl的问题,救急啊!
- 单文档应用程序,对话框怎么调用程序拆分视图窗口
- 简单~~~
//免费贡献一个函数给你参考:
void EnumComPort(HKEY hKey, LPCTSTR cstrKey)
{
static HKEY hLastKey = hKey;
LONG lResult;
DWORD dwIndex =0;
HKEY hCurKey = hKey;
DWORD dwKeyType;
DWORD dwKeyDataLength,dwKeyNameLen;
LPBYTE pbbinKeyData = NULL;
TCHAR *tcKeyName = NULL;
TCHAR tcDataType[1024] = _T("");
lResult = RegOpenKeyEx(hCurKey, cstrKey, 0, KEY_QUERY_VALUE, &hKey);
if(lResult != ERROR_SUCCESS)
return;
DWORD lNoOfValues = 0;
DWORD lLongestKeyNameLen = 1;
DWORD lLongestDataLen = 1;
lResult = RegQueryInfoKey(hKey, NULL, NULL, NULL,NULL, NULL, NULL,&lNoOfValues, &lLongestKeyNameLen, &lLongestDataLen, NULL, NULL);
if(lResult != ERROR_SUCCESS)
return;
hLastKey = hKey;
lLongestKeyNameLen++;
lLongestDataLen++;
tcKeyName = new TCHAR[lLongestKeyNameLen];
pbbinKeyData = new BYTE[lLongestDataLen];
CString cstrFinalData,cstrTemp;
while(TRUE)
{
memset(pbbinKeyData, 0, lLongestDataLen);
memset(tcKeyName, 0, lLongestKeyNameLen);
dwKeyType = dwKeyDataLength = dwKeyNameLen = 0;
dwKeyNameLen = lLongestKeyNameLen;
dwKeyDataLength = lLongestDataLen;
lResult = RegEnumValue(hKey, dwIndex, tcKeyName, &dwKeyNameLen, NULL, &dwKeyType, pbbinKeyData, &dwKeyDataLength);
if(lResult == ERROR_NO_MORE_ITEMS)
break; //(LPCTSTR)pbbinKeyData 这此处处理你的数据,
dwIndex++;
}
RegCloseKey(hKey);
delete tcKeyName;
delete pbbinKeyData;
}
请用管理员权限打开你生成的可执行文件
否则无法读写注册表
等接分