为什么PostMessage MOUSEEVENTF_LEFTDOWN导致接收应用程序崩溃?

时间:2019-12-06 16:37:09

标签: python winapi

我正在尝试发送鼠标点击一系列的左键按下和左键按下事件)到后台窗口 >-例如浏览器后面打开的应用程序。我正在尝试通过 Pywin32 ,即win32apiwin32guiwin32con模块来做到这一点。

在主函数中,我获得了窗口的句柄并调用了单击函数:

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将鼠标单击发送到前景中的窗口,但这无助于我将消息发送到背景中的窗口。还能做到吗?

1 个答案:

答案 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