【问题标题】:SetWindowsHookEx WH_JOURNALRECORD Blocks Mouse Clicks + KeystrokesSetWindowsHookEx WH_JOURNALRECORD 阻止鼠标点击 + 击键
【发布时间】:2021-03-02 06:46:52
【问题描述】:

我正在尝试使用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,就像其他类型的钩子一样)。尽管是一个控制台应用程序,但我添加了一个消息循环,所以我不认为这是问题所在。

如果有人知道我做错了什么,或者我可以如何解决这个问题,我们将不胜感激。

【问题讨论】:

  • 此挂钩需要 DLL。神奇的是它没有失败。
  • 我记得用 DLL 进行过尝试,结果相同。如果遇到问题,我将使用 DLL 再次尝试并在此处发布我的代码。但是 MSDN 文档声明:“JournalRecordProc 挂钩过程不需要存在于动态链接库中。JournalRecordProc 挂钩过程可以存在于应用程序本身中。” docs.microsoft.com/en-us/previous-versions/windows/desktop/…
  • 嗨,大部分时间代码对我来说都很好,但偶尔我可以重现这个问题。我会与内部工程师确认,如果有任何更新,请在此处回复。感谢您的理解。
  • @ZhuSong-MSFT 我也在 MSDN Q&A 论坛上发布了这个问题。另一位工程师也在研究这个问题。已经取得了一些进展,但仍然存在问题:docs.microsoft.com/en-us/answers/questions/167703/…。该钩子将在系统重新启动时起作用,但是一旦我开始启动应用程序,输入就会再次锁定。即使杀死应用程序也无济于事,直到我再次重新启动。

标签: c++ windows winapi hook


【解决方案1】:

经过数小时的故障排除后,我注意到如果我在 Windows 上创建一个新的用户帐户并从那里运行它,挂钩会按预期安装和运行。

我将所有正在运行的进程和服务转储到我的新测试帐户以及我的主帐户中,并检查了仅存在于我的主帐户中的那些。

我找到了一个服务(Alienware Command Center),它作为软件的一部分运行,允许我自定义鼠标和键盘。当服务和相应的进程被终止时,Journal 挂钩按预期工作。

该服务内部的某些东西出于某种原因干扰了钩子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多