【问题标题】:Emulating a mouseclick using PostMessage使用 PostMessage 模拟鼠标点击
【发布时间】:2016-10-03 23:54:02
【问题描述】:

我正在使用 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()

感谢每一个提示!

【问题讨论】:

  • UIPI 很可能阻止了这些消息。在任何情况下,您都应该使用mouse_event()SendInput() 而不是PostMessage()
  • MK_LBUTTON isn't a valid wParam for WM_LBUTTONUP。我认为WM_LBUTTONDOWN 也不需要它。
  • You can’t simulate keyboard input with PostMessage。同样的原则也适用于此。您可能想改用UI Automation。如果这确实由于 UIPI 边界而被拒绝,那么 UI 自动化是处理这个问题的唯一明智的方法。
  • @computerfreaker 嗯谢谢!没有查找 WM_LBUTTONUP,因为我认为它与 WM_LBUTTONDOWN 相同,我之前检查过...
  • @IInspectable 谢谢!我只是感到困惑,因为我看到一些other examples 人们使用 PostMessage() 或 SendMessage() 发送输入。我还没有在其中一个 pywin32 模块中找到 SendInput 或 UI 自动化,但我会更深入地了解它!

标签: python winapi pywin32


【解决方案1】:

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

【讨论】:

  • 这个答案拯救了我的一天!欣赏
猜你喜欢
  • 2013-01-30
  • 2022-11-18
  • 2010-10-21
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多