注册表值未保存在按键上

时间:2013-07-16 12:04:37

标签: c++ winapi visual-c++ registry

我写了一个小程序,它挂在键盘上并更改了按键上的注册表值。这是回调代码:

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;

1 个答案:

答案 0 :(得分: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)。