所以我一直停留在这一段时间......还以为我得到它的工作,但它有时会中断,我不知道确切的原因...C++读取和写入注册表正确
我不知道这是否重要,但我正在编写这个内部浏览器帮助对象(BHO)...是否IE总是32位进程,无论它是否在64和32位操作系统上运行?
,所以我希望能够从注册表中读取,我可能需要箱子的关键...
我用这个函数:
if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\ProductName", 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_32KEY,
NULL, &hk, NULL) == ERROR_SUCCESS)
然后我检查是否有键存在这样的:
TCHAR ext_id[20];
DWORD toolbarIdLength;
if(RegQueryValueEx(hk, L"ext_id", NULL, NULL,
(LPBYTE)ext_id, &extIdLength) == ERROR_SUCCESS)
如果成功,那么我确定它是空终止:
ext_id[extIdLength] = 0;
否则我使用WININET LIB的信息发送到我的服务器,分配新EXT_ID和我写注册表这个值...使用此功能:
RegSetValueEx(hk, L"ext_id", 0, REG_SZ, (const BYTE *)ext_id, _tcslen(ext_id)*2 + 1);
因为它是只写一半的一些奇怪的原因我传递的东西,所以我加倍_tcslen(ext_id)并添加1安全?大部分时间我发现网上没有该长度乘以2的例子,它为我这个样子,所以我离开它独自...
似乎这一切工作正常:
和它的工作对我dev_machine :Windows 7 64bit。
测试了32位Windows 7 ...
问题一起在Windows XP的IE 6来了,也没有工作,但似乎如果我再打电话函数RegQueryValueEx,它会返回正确的值,所以我注意到下一个请求...
我还注意到,根据我发送到服务器的其他字符串,它会工作不同,这可能是由于我相对较新的C++ ,(只有几个星期真的在),我确信我正在做一些真正错误的事情。
呵呵我在msdn上读到我需要在打开注册表项的标志中使用KEY_WOW64_32KEY或KEY_WOW64_64KEY,这取决于情况......但这对我来说确实非常必要(浏览器6.0到8.0的BHO)
thanx的快速答复.... 是否写入注册表有从中读什么影响吗?我理解你所提出的所有观点,但是我在Windows XP中从注册表中读取问题似乎是唯一的解决方法,就是在必要时打开并查询密钥两次,以使其正常工作 最奇怪的是,当我在同一个函数中使用了AtlEscapeUrl,而RegQueryValueEx在WindowsXP中失败了,但是在Windows7下工作,当我将这个函数移出到子函数时,它又开始工作了......这是怎么回事? – user385342 2010-08-05 10:42:25