所以我一直停留在這一段時間......還以爲我得到它的工作,但它有時會中斷,我不知道確切的原因...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