2

我编写了一个脚本,使用pyautogui它应该启动一个程序(IDE),然后开始使用它。这是到目前为止的脚本:

#! python3
# mouseNow.py - Displays the mouse cursor's current position.
import pyautogui, sys, subprocess
from time import sleep

x,y = 1100,550

subprocess.call([r'C:\...exe',  arg1, arg2])
pyautogui.click(x,y)
sleep(5) # 2 sec should suffice but this is for safety
pyautogui.typewrite(my_string)
pyautogui.press('enter')

这很好用,但我想要便携。这些x,y值是由我启动程序后程序提示出现在屏幕上的位置决定的,但我认为这不是可移植的。有没有办法在不提供 const 参数的情况下将鼠标指向提示?就像是move_mouse_to_window_of_this_process_after_starting_it()

另外,我使用所以我会在它出现后将sleep()数据写入窗口,但我想这不是一个好方法(我猜有些电脑会运行得这么慢),所以有没有办法知道提示何时出现和然后做?pyautogui.typewrite(my_string)

编辑:我找到了一个简单的解决方案move_mouse_to_window_of_this_process_after_starting_it()

>>> pyautogui.hotkey('alt', 'tab')

4

2 回答 2

2

如果您需要可移植且可靠的解决方案,您必须找到一个支持可访问性技术的库,以通过文本访问 GUI 元素。基本技术有:

  • Win32 API、MS UI 自动化 (Windows)
  • AT-SPI (Linux)
  • Apple 辅助功能 API (MacOS)

有几个开源 GUI 自动化库支持其中一些技术(通常是 1 或 2 个)。Python解决方案:

StackOverflow 上还有一个关于硬睡眠与灵活等待的线程。

享受!:)

于 2017-02-24T15:31:06.413 回答
1

您与 .exe 交互的方式不包括坐标或盲触发(Tab、Tab、Enter 等)的替代方法。

如果应用程序有 API,您可以通过编程方式与它进行交互。如果不是,您只能尝试匹配 x 屏幕分辨率的位置,并且仅当 GUI 用于全屏/窗口全屏时。

于 2017-02-23T10:08:37.540 回答