我写了一个小程序,它挂在键盘上并更改了按键上的注册表值。这是回调代码:
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 :(得分: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)。