Python 为什么PostMessage MOUSEEVENTF_LEFTDOWN会使接收应用程序崩溃?
我正在尝试将鼠标单击发送到背景中的窗口,例如发送到浏览器后面打开的应用程序。我试图通过Pywin32实现这一点,即Python 为什么PostMessage MOUSEEVENTF_LEFTDOWN会使接收应用程序崩溃?,python,winapi,Python,Winapi,我正在尝试将鼠标单击发送到背景中的窗口,例如发送到浏览器后面打开的应用程序。我试图通过Pywin32实现这一点,即win32api、win32gui和win32con模块 在我的主函数中,我获得了窗口的句柄并调用了单击函数: def main(): window = win32gui.FindWindow(None, "ExistingWindowName") while True: test_click_bg(window, 250, 250)
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剪贴工具和其他一些程序进行了测试。一切都崩溃了
我完全能够通过win32api.mouse\u event
将鼠标单击发送到前台的窗口,但这无助于我在后台向窗口发送消息。甚至可以做到吗
为什么PostMessage MOUSEEVENTF_LEFTDOWN会使接收崩溃
申请
这个问题@Daniel Sęk已经回答了:
MOUSEEVENTF_LEFTDOWN的值为2,因此您可以使用
代码2。这是WM_销毁。大多数应用程序在接收WM_时会被破坏
在主窗口程序中执行一些清理并退出
用于发送WM_xxxx类型的消息,而不是MOUSEEVENTF_xxxx
我完全能够将鼠标点击发送到窗口中
前台通过win32api.mouse_事件,但这对我没有帮助
在后台向windows发送消息。甚至可以吗
怎么办
对于此问题,您可以使用PostMessage
sendmessage
旁注:功能已被取代。请改用。您不能做您想做的事情。即使您决定发送实际的窗口消息(而不是与其他API一起使用的标志)。@IInspectable谢谢您的回答。你能告诉我什么时候我能读到更多关于为什么我不能做这件事的信息吗?还有,投了否决票的人——为了避免投否决票,这个问题应该有什么更好的解释。否决票的原因:此代码纯粹基于猜测。一个问题的答案是,为什么代码没有按照作者的猜测去做,这将是没有用的。如果您坚持要知道:您正在发布一个消息常量,该常量期望指针作为其参数之一。受害者试图取消对它们的引用,结果崩溃了。@i不可检测,很公平!虽然这肯定是猜测工作的结果,但在提出问题之前,我做了大量测试。:)谢谢你的推荐,我非常感谢你最后的评论——它回答了我的问题。如果你有兴趣把它变成一个答案,我会接受它。
MOUSEEVENTF_LEFTDOWN
的值是2,所以你用代码2发布消息。这是WM\u DESTROY
。大多数应用程序在主窗口过程中接收WM_DESTROY
时都会执行一些清理和退出操作。