Python 使用PostMessage模拟鼠标单击

Python 使用PostMessage模拟鼠标单击,python,winapi,pywin32,Python,Winapi,Pywin32,我正在使用python的win32模块创建一个简单的click()方法,该方法应该模拟鼠标单击,但不幸的是,我的方法不起作用 def click(x, y): hWnd = win32gui.FindWindow(None, "SomeWindowTitle") lParam = win32api.MAKELONG(x, y) win32gui.PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam); win3

我正在使用python的win32模块创建一个简单的click()方法,该方法应该模拟鼠标单击,但不幸的是,我的方法不起作用

def click(x, y):
    hWnd = win32gui.FindWindow(None, "SomeWindowTitle")
    lParam = win32api.MAKELONG(x, y)

    win32gui.PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam);
    win32gui.PostMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, lParam);

...
timer = Timer(30, click, [x, y])
timer.start()

我感谢每一个提示

我现在可以用了。。上面的代码运行良好,我唯一不知道的是,我是从屏幕坐标中的
win32api.GetCursorPos()
获取光标位置的,但是
win32gui.PostMessage()
需要hWnd的相对坐标。只需使用
ScreenToClient()
将其转换就可以了。

我现在就可以让它工作了。。上面的代码运行良好,我唯一不知道的是,我是从屏幕坐标中的
win32api.GetCursorPos()
获取光标位置的,但是
win32gui.PostMessage()
需要hWnd的相对坐标。只需使用
ScreenToClient()
将其转换就可以了。

很可能是阻止了消息。在任何情况下,都应该使用
mouse\u event()
SendInput()
而不是
PostMessage()
。。我想你也不需要它。。这里也适用同样的原则。你可能想用它来代替。如果这真的因为UIPI边界而被拒绝,那么UI自动化是处理这个问题的唯一明智的方法。@computerfreaker Mhh谢谢!没有为WM_LBUTTONUP查找,因为我认为它将与WM_lbuttonown一样,我之前检查过它…@IInspectable感谢您!我只是感到困惑,因为我看到一些人使用PostMessage()或SendMessage()发送输入。我还没有在其中一个pywin32模块中找到SendInput或UI自动化,但我将更深入地了解它!最有可能的是阻止消息。在任何情况下,都应该使用
mouse\u event()
SendInput()
而不是
PostMessage()
。。我想你也不需要它。。这里也适用同样的原则。你可能想用它来代替。如果这真的因为UIPI边界而被拒绝,那么UI自动化是处理这个问题的唯一明智的方法。@computerfreaker Mhh谢谢!没有为WM_LBUTTONUP查找,因为我认为它将与WM_lbuttonown一样,我之前检查过它…@IInspectable感谢您!我只是感到困惑,因为我看到一些人使用PostMessage()或SendMessage()发送输入。我还没有在其中一个pywin32模块中找到SendInput或UI自动化,但我将更深入地了解它!这个答案救了我一天!这个答案救了我一天!报答