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 获取窗口中虚拟光标的当前位置的主要内容,如果未能解决你的问题,请参考以下文章

win32gui:如何获取窗口的状态栏文本?

python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过pyauto实现右键菜单和另存为操作

python 调用windowsAPI截图

Python中设置指定窗口为前台活动窗口(最顶层窗口)win32gui

python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入

win32gui 获取窗口内容(internet explorer_server)