SetWindowsHookEx WH_JOURNALRECORD 阻止鼠标点击 + 击键
SetWindowsHookEx WH_JOURNALRECORD Blocks Mouse Clicks + Keystrokes
我正在尝试使用 SetWindowsHookEx
:
安装 WH_JOURNALRECORD
#include <iostream>
#include <Windows.h>
LRESULT CALLBACK WndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
std::cout << "Hook called" << std::endl;
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
HHOOK hook = SetWindowsHookEx(WH_JOURNALRECORD, WndProc, 0, 0);
if (hook != NULL)
{
std::cout << "Hooked WH_JOURNALRECORD" << std::endl;
}
else
{
DWORD dw = GetLastError();
std::cout << "Failed to install hook:" << "(Error: " << dw << ")" << std::endl;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
我的应用程序使用证书和 运行 在 C:\Program Files
下作为管理员签名,这是 JournalRecord
挂钩 (/uiAccess=true
) 所必需的。应用程序启动并且挂钩已成功安装,但是我从未收到 WndProc
函数的任何输出。我可以移动光标,但是在按下 ctrl+alt+del
或另一个强制 Windows 卸载 JournalRecord
挂钩的组合键之前,我无法单击或键入任何内容。
根据文档,这种类型的挂钩是全局挂钩,可以 运行 在相同的应用程序上下文中(即,不需要像其他类型的挂钩那样的 DLL)。尽管是一个控制台应用程序,但我添加了一个消息循环,所以我认为这不是问题所在。
如果有人知道我做错了什么,或者我该如何解决这个问题,我们将不胜感激。
经过数小时的故障排除后,我注意到如果我在 Windows 上创建一个新用户帐户并从那里创建 运行,挂钩会按预期安装和 运行s。
我将所有 运行ning 进程和服务转储到我的新测试帐户以及我的主帐户上,并检查了那些只存在于我的主帐户上的进程和服务。
我找到了一项服务(Alienware Command Center),运行它是允许我自定义鼠标和键盘的软件的一部分。当服务和相应的进程被终止时,日志挂钩将按预期工作。
无论出于何种原因,该服务内部的某些内容都会干扰挂钩。
我正在尝试使用 SetWindowsHookEx
:
WH_JOURNALRECORD
#include <iostream>
#include <Windows.h>
LRESULT CALLBACK WndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
std::cout << "Hook called" << std::endl;
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
HHOOK hook = SetWindowsHookEx(WH_JOURNALRECORD, WndProc, 0, 0);
if (hook != NULL)
{
std::cout << "Hooked WH_JOURNALRECORD" << std::endl;
}
else
{
DWORD dw = GetLastError();
std::cout << "Failed to install hook:" << "(Error: " << dw << ")" << std::endl;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
我的应用程序使用证书和 运行 在 C:\Program Files
下作为管理员签名,这是 JournalRecord
挂钩 (/uiAccess=true
) 所必需的。应用程序启动并且挂钩已成功安装,但是我从未收到 WndProc
函数的任何输出。我可以移动光标,但是在按下 ctrl+alt+del
或另一个强制 Windows 卸载 JournalRecord
挂钩的组合键之前,我无法单击或键入任何内容。
根据文档,这种类型的挂钩是全局挂钩,可以 运行 在相同的应用程序上下文中(即,不需要像其他类型的挂钩那样的 DLL)。尽管是一个控制台应用程序,但我添加了一个消息循环,所以我认为这不是问题所在。
如果有人知道我做错了什么,或者我该如何解决这个问题,我们将不胜感激。
经过数小时的故障排除后,我注意到如果我在 Windows 上创建一个新用户帐户并从那里创建 运行,挂钩会按预期安装和 运行s。
我将所有 运行ning 进程和服务转储到我的新测试帐户以及我的主帐户上,并检查了那些只存在于我的主帐户上的进程和服务。
我找到了一项服务(Alienware Command Center),运行它是允许我自定义鼠标和键盘的软件的一部分。当服务和相应的进程被终止时,日志挂钩将按预期工作。
无论出于何种原因,该服务内部的某些内容都会干扰挂钩。