【问题标题】:Is it possible to interact with GUI-based desktop applications using Python, and how?是否可以使用 Python 与基于 GUI 的桌面应用程序交互,以及如何交互?
【发布时间】:2019-11-21 21:11:00
【问题描述】:
我计划为我的 *nix 系统编写一个服务,该服务可以与本地计算机上的选定数量的 GUI 应用程序(如 Photoshop、Libre Office 等)进行交互。
本地服务的目的本质上是侦听远程消息并相应地执行特定操作 - 例如,在 Photoshop 中更改图层的背景,或在 Libre Office(或 MS Office)中为页面添加边距。您可以假设应用程序在操作系统的显示环境中处于活动状态。
现在我的问题是:
- 这甚至可能吗?我个人认为这项任务是不可能的,除非我能够窥探这些应用程序的源代码并基本上扩充这些应用程序本身。但由于它们大多是专有应用程序,因此也存在法律问题。
- 假设通过更改这些应用程序的源代码以某种方式成为可能,那么团队是否不必弄清楚所有这些特定应用程序的架构和内部工作原理,或者是否有我应该研究的通用框架概念?
【问题讨论】:
标签:
python
user-interface
ms-office
reverse-engineering
【解决方案1】:
UI 应该只从主线程更新。或者只是考虑发送 Windows 消息。
本地服务的目的本质上是监听远程消息并相应地执行特定操作
Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定Office 在此环境中运行时的行为和/或死锁。
如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。在Considerations for server-side Automation of Office 文章中了解更多信息。