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;
4

1 回答 1

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)。

于 2013-07-16T12:51:45.310 回答