在修改注册表时,注册表的键值有几种,其中二进制的REG_BINARY类型的不知道如何修改,我写的代码如下:RegQueryValueEx(hdsz,vaname,NULL,&k,(BYTE*)vari,&ncbvari),其中K为REG_BINARY,vari不论为Char类型还是BYTE类型都没有办法读取到二进制类型键值的Value值,还请各位前辈帮忙!
我希望知道如何获得Vaname的键值并且修改它!
谢谢了!
我希望知道如何获得Vaname的键值并且修改它!
谢谢了!
解决方案 »
- 使用CxImage实现png图片透明度
- 第三个!!!---VS2005下编译通不过???--VS2003可以通过
- 请问关于相互引用的问题
- 大家觉得用 MFC+CSocket好还是用MFC+WINSOCK好?
- 如何用程序取得路由器上的外网连接IP?
- !!怎样做一个类似输入法中软键盘那样的窗体,总在最前边,又没有焦点,还能接受输入???!!
- 哪位经验丰富人士指点一下:VC中的custom control是做什么用的?
- DirectDraw显示位图失败?
- 动态链接库如何调试?
- 在设计程序时,当遇到难题时,我是应该靠自己死钻到底,还是去提问?
- 有没有api可以设置系统网关的
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 如何给运行中的进程传递命令行参数?
//注册表的查询修改的一般过程
//1 打开注册表项
//2 查询某个注册表项键值
//3 修改某个注册表项键值
//4 关闭注册表表项
HHEY hKey;
LONG lRet;
DWORD dwType,
BYTE pBuff[100];
DWORD dwSize;
if(RegOpenKey(HKEY_LOCAL_MACHINE,"Test",0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)
{
TRACE("注册表打开失败!\n");
return;
}
LONG lRet = RegQueryValueEx(hKey,szData,0,&dwType,pBuff,&dwSize);
if(lRet != ERROR_SUCCESS)
{
TRACE("查询注册表键值失败!\n");
return;
}
lRet = RegSetValueEx(hKey,szData,0,REG_BINARY,pBuff,dwSize);
if(lRet! =ERROR_SUCCESS)
{
TRACE("修改注册表键值失败!\n");
return;
}
lRet =RegCloseKey(hKey);
if(lRet!= ERROR_SUCCESS)
{
TRACE("关闭注册表项失败!\n");
return;
}
REG_SZ和REG_DWORD类型的键值,得到的都是正确的,对于REG_BINARY有什么特别的要求吗?
//打开注册表
CRegKey RegParamter;
TCHAR szRegName[MAX_PATH];
_snprintf(szRegName,sizeof(szRegName),TEXT("Software\\%s\\x"),szSystemRegKey);
if (RegParamter.Open(HKEY_CURRENT_USER,szRegName,KEY_READ)!=ERROR_SUCCESS) return;
HKEY hk;
CString RegkeyDBname;
char *vaname;
DWORD ncbvari;
vaname=new char[1024];
BYTE vari[1024];
char *chary;
chary=new char[1024];
RegkeyDBname="SYSTEM\\CurrentControlSet\\Control\\COM Name Arbiter\\";
strcpy(vaname,"ComDB");
ClickCount++;
delcomm();
if(ClickCount==1)
{
if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegkeyDBname,0,KEY_READ,&hdsz))
{
DWORD k=REG_BINARY;
if(ERROR_SUCCESS==RegQueryValueEx(hdsz,vaname,NULL,&k,(BYTE*)vari,&ncbvari))
{
CString xx;
xx=(CString)vari;
MessageBox(xx);
}
}
}
if(ERROR_SUCCESS==RegQueryValueEx(hdsz,vaname,NULL,&k,(BYTE*)vari,&ncbvari))
#define PAGE_SIZE (4096)int main(int argc, char* argv[])
{
HKEY hKey=NULL;
HRESULT hr;
DWORD dwType;
LPBYTE data=NULL;
DWORD cbData; TCHAR szKeyName[MAX_PATH]=TEXT("SYSTEM\\CurrentControlSet\\Control\\COM Name Arbiter");
TCHAR szValueName[MAX_PATH]=TEXT("ComDB"); hr=RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_READ, &hKey);
if(ERROR_SUCCESS!=hr) goto Label_ErrExit;
cbData=PAGE_SIZE;
data=(LPBYTE)LocalAlloc(LPTR, PAGE_SIZE);
dwType=REG_BINARY;
hr=RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE)data, (LPDWORD)&cbData);
if(ERROR_SUCCESS!=hr) goto Label_ErrExit; printf("cb=%ld\r\n", cbData);
LocalFree(data);
RegCloseKey(hKey);
getchar();
return 0;
Label_ErrExit:
printf("error=%ld\r\n", GetLastError());
if(NULL!=data) LocalFree(data);
if(NULL!=hKey) RegCloseKey(hKey);
getchar();
return 0;
}
例如:
TCHAR szBinaryString[PAGE_SIZE]=TEXT("");
DWORD x;
LPSTR pCursor=szBinaryString;
for(x=0;x<cbData;x++)
{
pCursor+=wsprintf(pCursor, "%.20x ", data[x]);
}printf("hexstring = %s\r\n", szBinaryString);
#include <windows.h>#define PAGE_SIZE (4096)int main(int argc, char* argv[])
{ HKEY hKey=NULL;
HRESULT hr;
DWORD dwType;
LPBYTE data=NULL;
DWORD cbData;
DWORD x;
LPTSTR psz=NULL;
LPTSTR pCursor; TCHAR szKeyName[MAX_PATH]=TEXT("SYSTEM\\CurrentControlSet\\Control\\COM Name Arbiter");
TCHAR szValueName[MAX_PATH]=TEXT("ComDB"); hr=RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_READ, &hKey);
if(ERROR_SUCCESS!=hr) goto Label_ErrExit;
cbData=PAGE_SIZE;
data=(LPBYTE)LocalAlloc(LPTR, PAGE_SIZE);
dwType=REG_BINARY;
hr=RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE)data, (LPDWORD)&cbData);
if(ERROR_SUCCESS!=hr) goto Label_ErrExit; printf("cb=%ld\r\n", cbData);
//** 以十六进制显示data数据,字节间以空格分隔
psz=(LPTSTR)LocalAlloc(LPTR, sizeof(TCHAR)*(cbData*3+1));
pCursor=psz;
for(x=0;x<cbData;x++)
{
pCursor+=wsprintf(pCursor, TEXT("%0.2x "), (BYTE)data[x]);
}
printf("data=%s\r\n", psz); LocalFree(psz);
LocalFree(data);
RegCloseKey(hKey);
getchar();
return 0;
Label_ErrExit: printf("error=%ld\r\n", GetLastError());
if(NULL!=data) LocalFree(data);
if(NULL!=hKey) RegCloseKey(hKey);
getchar();
return 0;
}