我需要将鼠标移动到最后打开的窗口。最后一个窗口将是由任何网站创建的弹出窗口。我想我需要的只是获取最后打开的窗口的位置并使用 SetMousePos,对吧?我对 Windows API 不是很熟悉,欢迎提供任何帮助 - 谢谢!
编辑:为了回答这些问题,我们正在编写一个获取恶意软件数据的程序。不幸的是,一些恶意软件只有在鼠标移动到他们打开的弹出窗口后才开始工作。它是基于研究的应用程序
跟踪最近打开的窗口的一种方法是使用SetWinEventHook来监听 EVENT_OBJECT_CREATE 和 EVENT_OBJECT_SHOW 事件。在回调中,过滤:
如果您只关心来自特定应用程序的 HWND,还可以通过 GetWindowThreadProcessId() 和传递给 SetWinEventHook 的线程/进程进行过滤。
检查这两个事件的原因是某些窗口被创建为隐藏然后显示,其他窗口被创建为完全可见,而其他窗口被创建一次,然后在其生命周期内多次显示/隐藏。
然后,您可以在全局中缓存这个“最后已知创建的 hwnd”,并根据需要检查它,使用 GetWindowRect() 获取其位置,并使用 SetCursorPos() 将鼠标移动到该位置。
--
如果最近的弹出窗口是一个获得焦点的活动窗口 - 就像对话框的情况,但通常不是“弹出”窗口的情况 - 你可以使用GetGUIThreadInfo(NULL, ...)来确定当前活动的 HWND ,这可能是您正在寻找的那个,在您传递给它的结构的 GUITHREADINFO.hwndActive 成员中返回。
我没有对此进行测试,但我相信您可以尝试以下方法:
我没有包含这些任务所需的所有 API,因为它通常很容易在这里找到 :)