Python win32gui 获取窗口中虚拟光标的当前位置

Posted

技术标签:

【中文标题】Python win32gui 获取窗口中虚拟光标的当前位置【英文标题】:Python win32gui get current position of the virtual cursor in a window 【发布时间】:2021-07-09 19:12:05 【问题描述】:

我知道使用win32gui.PostMessage(hwnd, win32con.WM_MOUSEMOVE, wParam, lParam) 我可以将鼠标移动到一个没有焦点的应用程序上,而不会影响我的真实鼠标。

如果win32api.GetCursorPos() 返回我的真实鼠标光标的位置,我如何获得我当前的“假鼠标”位置?

编辑#1:

我在外部应用程序上使用WM_MOUSEMOVE,因此我唯一拥有的是应用程序的window handle (HWND)。

【问题讨论】:

【参考方案1】:

你可以使用GetMessagePos:

检索最后一条消息的光标位置 GetMessage函数。

更多参考:Possible to do MouseMove actions with PostMessage without hijacking the cursor?

编辑

如果你只想通过外部应用程序的HWND获取它的消息,你需要使用SetWindowsHookEx并将其制作成dll注入到外部进程中。

您可以使用SetWindowsHookEx 函数,与WH_CALLWNDPROC 或其他类型的挂钩,here 就是一个例子。

【讨论】:

我对它的用法有点困惑。我在哪里提供 窗口处理程序 (hwnd)?在使用GetMessagePos()之前是否需要使用GetMesssage()函数? 只能检索属于当前线程的窗口。 所以如果我有一个应用程序(比如说画图),我有它的hwnd,我通过WM_MOUSEMOVE 在画图中移动了虚拟鼠标,我将无法获得虚拟光标只用hwnd? 是的,根据GetMessage:要检索其消息的窗口的句柄。窗口必须属于当前线程。所以不能只通过hwnd获取它的内部消息。 我更新了我的问题,更具体。不幸的是,我正在尝试获取 external 应用程序的虚拟光标位置,因此我只有它的窗口处理程序。

以上是关于Python win32gui 获取窗口中虚拟光标的当前位置的主要内容,如果未能解决你的问题,请参考以下文章