2013-07-16 4 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

Смежные вопросы