微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Win32api.SendMessage无法在某些应用程序中执行鼠标单击

如何解决为什么Win32api.SendMessage无法在某些应用程序中执行鼠标单击

我使用的是Windows操作系统,并且试图对后台(非活动)应用程序进行点击,而无需将其显示在前面。 我已经在Microsoft Paint中成功完成了工作(在最小化的Paint实例上绘制一个点),但是由于某种原因,这似乎不适用于我正在编写此程序的基于Java的应用程序(RuneLite.exe)

一些其他信息:

  • 绘画有很多子窗口,当我在特定的子窗口(类:Afx:00007FF758890000:8)上执行单击时,似乎只能执行单击操作。
  • RuneLite窗口结构如下:
    • RuneLite(类:SunAwtFrame)
      • 未知(类:SunAwtCanvas)
        • 未知(SunAwtCanvas类)
  • 我尝试使用上述所有3个窗口的句柄,但似乎没有一个起作用
  • 代码能够找到窗口的句柄并且正确(已通过Spy ++检查)
  • 运行代码后,该窗口在任务栏中闪烁橙色,因此必须触发某些事件
  • 我已经通过截屏窗口并使用绘制来查找特定位置的坐标来确定坐标。 (如果有更好的方法,请告诉我)
from pywinauto.application import Application

amount = 2
handles = []

def start_apps():
    for i in range(amount):
        a = Application()
        a.start("D:\\Users\\Arno\\AppData\\Local\\RuneLite\\RuneLite.exe")
        time.sleep(15)
        handle = a.window().child_window(class_name="SunAwtCanvas",found_index=1).handle # select the most inner window
        handles.append(handle)


def do_click(h,x,y):
    long_position = win32api.MAKELONG(x,y)  # simulate the mouse pointer and send it to the specified coordinates
    win32api.SendMessage(h,win32con.WM_LBUTTONDOWN,win32con.MK_LBUTTON,long_position)  # simulate mouse press
    win32api.SendMessage(h,win32con.WM_LBUTTONUP,long_position)  # Simulate mouse up


start_apps()
print(handles)
time.sleep(20)
for h in handles:
    do_click(h,450,290)

Output of the code

有人知道为什么会这样吗?我该如何解决呢?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。