【问题标题】:How to detect when a windows get a WM_MOVE message如何检测窗口何时收到 WM_MOVE 消息
【发布时间】:2017-10-03 15:28:00
【问题描述】:

我试图检测远程进程何时收到 WM_MOVE 消息,以便我可以 重新扫描新窗口位置并相应地更改我的窗口 (我正在创建一个叠加层)

我想我可能需要使用 DLL 注入,但 Microsoft 文档是如此可怕和不连贯,以至于我无法确定执行注入所需的最低限度,并且只知道 WM_MOVE 消息何时发送到远程进程

【问题讨论】:

  • 请更准确地描述您的问题以及您想要实现的目标。
  • 不要摆弄内部实现细节。请改用标准基础架构,即WinEvents,监控EVENT_OBJECT_LOCATIONCHANGE 事件。
  • remote process 是什么意思?
  • 我试图“窥探”消息的进程不是子进程,也就是我没有对该进程的所有权,但我有访问管理权限
  • 父进程对其产生的进程没有任何特定权限。听起来您有使用其他操作系统的经验并假设任何其他操作系统都会像您熟悉的操作系统一样。我不知道您熟悉哪种操作系统,但权限管理在 Windows 中的工作方式有所不同。

标签: c++ winapi hook


【解决方案1】:

对于低级支持,请将 SetWindowsHookEx 与 WH_CALLWNDPROC 或 WH_CALLWNDPROCRET 一起使用。在 x64 Windows 上,您需要编写一个 32 位 dll、一个 64 位 dll,并让 32 位进程和 64 位进程都使用各自的 dll 调用它(因为无法设置 32 位进程一个 64 位的钩子,反之亦然)。然后,如有必要,您可以将注入的 dll 中的 IPC 机制写入主进程。但一定要提高 CPU 使用率!如果启用“拖动时显示窗口内容”,在窗口移动过程中会有很多 WM_MOVE 消息。

要获得更高级别的支持,请将 SetWinEventHook 与 EVENT_OBJECT_LOCATIONCHANGE 一起使用,并确保您只为顶级窗口处理它。

后者通常比前者更受欢迎,因为它更可靠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2010-11-06
    • 2021-01-29
    • 2021-05-06
    • 2018-07-18
    相关资源
    最近更新 更多