2013-07-16 32 views
0

我已經寫了一個小程序,它掛鉤到鍵盤並更改按鍵上的註冊表值。這裏是回調代碼:註冊表值沒有保存在按鍵上

LRESULT WINAPI keyDownEvent(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) 
    { 
     KBDLLHOOKSTRUCT kbdStruct = *(((KBDLLHOOKSTRUCT *) lParam)); 
     if ((kbdStruct.vkCode == VK_LWIN) || (kbdStruct.vkCode == VK_RWIN)) 
     { 
     RegSetValueEx(key, TEXT("MakeAllAppsDefault"), NULL, REG_DWORD, (const BYTE*) DISABLE_APPS_VIEW, sizeof(DISABLE_APPS_VIEW)); // Set value to 0 (OFF) 
     } 
    } 
    return CallNextHookEx(NULL, nCode, wParam, lParam); // Pass info to next hook procedure 
} 

從函數RegSetValueEx == ERROR_SUCCESS返回值,這意味着該值被設定,但是當我打開註冊表,該值仍然是相同的。有什麼我做錯了嗎?

DWORD DISABLE_APPS_VIEW = 0; 
DWORD ENABLE_APPS_VIEW = 1; 
+0

什麼是DISABLE_APPS_VIEW和ENABLE_APPS_VIEW? –

+0

@JonathanPotter: 'DWORD DISABLE_APPS_VIEW = 0;' 'DWORD ENABLE_APPS_VIEW = 1;' – noobprohacker

+0

看起來你並沒有將它們的**地址**傳遞給'RegSetValueEx'。 –

回答

0

通過

RegSetValueEx(key, TEXT("MakeAllAppsDefault"), NULL, REG_DWORD, 
(const BYTE*) &DISABLE_APPS_VIEW, sizeof(DISABLE_APPS_VIEW)); // Set value to 0 (OFF) 

替換

RegSetValueEx(key, TEXT("MakeAllAppsDefault"), NULL, REG_DWORD, 
(const BYTE*) DISABLE_APPS_VIEW, sizeof(DISABLE_APPS_VIEW)); // Set value to 0 (OFF) 

換句話說:把一個&在DISABLE_APPS_VIEW的前面。您必須將DWORD變量的地址傳遞給RegSetValueEx,而不是該值本身。

順便說一句,不應該在「所有大寫字母」中放置變量名,因爲按照C和C++的慣例,「所有大寫字母」名通常用於預處理器定義的常量(例如#define MYCONSTANT 123)。

+0

哦,廢話..這樣一個愚蠢的錯誤。非常感謝! – noobprohacker