我正在尝试发送鼠标点击(一系列的左键按下和左键按下事件)到后台窗口 >-例如浏览器后面打开的应用程序。我正在尝试通过 Pywin32 ,即win32api
,win32gui
和win32con
模块来做到这一点。
在主函数中,我获得了窗口的句柄并调用了单击函数:
def main():
window = win32gui.FindWindow(None, "ExistingWindowName")
while True:
test_click_bg(window, 250, 250)
sleep(1)
负责在后台单击鼠标的功能非常简单:
def test_click_bg(window, x, y):
win32gui.PostMessage(window, win32con.MOUSEEVENTF_LEFTDOWN, x, y)
win32gui.PostMessage(window, win32con.MOUSEEVENTF_LEFTUP, x ,y)
对PostMessage
的第一次调用已使我试图将此事件发送到的窗口崩溃。为什么会这样呢?我使用Mozilla Firefox,Windows Snipping Tool和其他一些程序进行了测试。全部崩溃了。
我完全有能力通过win32api.mouse_event
将鼠标单击发送到前景中的窗口,但这无助于我将消息发送到背景中的窗口。还能做到吗?
答案 0 :(得分:0)
为什么PostMessage MOUSEEVENTF_LEFTDOWN导致接收崩溃 申请吗?
这个问题@DanielSęk已经回答:
MOUSEEVENTF_LEFTDOWN的值为2,因此您要通过以下方式发布消息 代码2。这是WM_DESTROY。收到WM_DESTROY的大多数应用程序 在主窗口过程中进行一些清理并退出。
PostMessage
用于发送 WM _ xxxx类型的消息,而不是 MOUSEEVENTF _ xxxx。
我完全能够将鼠标点击发送到 通过win32api.mouse_event进行前台,但这对我没有帮助 向后台的窗口发送消息。可以吗 完成吗?
对于此问题,您可以使用PostMessage
发送WM_LBUTTONDOWN
消息。
旁注:mouse_event功能已被取代。请改用SendInput
。