我正在尝试在属于另一个进程的窗口中模拟简单的鼠标移动。我的应用程序使用全局挂钩将 DLL 注入目标进程 ( WH_CBT
and WH_GETMESSAGE
),并且注入工作就像一个魅力。目的是欺骗目标进程,使其认为鼠标经过了屏幕的一部分。当我用物理鼠标移动时,这会触发特定的应用程序行为(例如,正在显示工具提示)。当我执行“技巧”时,我希望实际鼠标指针保持在其当前位置。
我已经用 Spy++ 建立了消息监控。向目标 HWND 发送(或发布)普通 WM_MOUSEMOVE 消息已由 Spy++ 注册,但没有预期的效果。当鼠标被物理移动时,应用程序会做它的事情。我曾尝试将其他一些消息与 WM_MOUSEMOVE(例如 WM_SETCURSOR)一起发送,但情况并没有改善。我什至在目标进程中劫持了GetCursorPos以返回与 WM_MOUSEMOVE 中发布的相同坐标(前者是屏幕,后者是客户端),但这也无济于事。
当我做一个简单的SetCursorPos时,应用程序会做它应该做的事情。我还错过了 SetCursorPos 正在做什么的其他魔法?Spy++ 捕获的消息在这两种情况下看起来或多或少相同。
欢迎任何有关如何发送鼠标移动的建议。我不想使用 SendInput、mouse_event 或其他 API。我需要在很短的时间内针对特定的 HWND。