3

这可能是一个模糊的问题,但我没有正确地改写它。所以这里有一个解释。

我开发了一个应用程序,它最初是作为 Mac 应用程序开发的,使用 Carbon/Cocoa 的 API 来完成我的任务。(应用程序的目标是在鼠标移动/其他击键后向应用程序发送“击键”。我为此使用辅助功能 API)。

但是现在,我想添加脚本支持,所以可以有条件击键。如:按'Y'5次后,我想按'B'键。

在 OSX 中,Python 应用程序不可能做这样的事情,而且我找不到任何允许我这样做的库。所以我想我会把这个应用程序做成两倍。首先:我将在 Cocoa/Carbon 中编写一个具有基本功能的应用程序:SendKeyToApp(pid,key) 和 WaitForMovement()。

python 应用程序将使用这些方法调用与该应用程序通信。这里的问题是:我如何在这两个应用程序之间进行通信?我会使用 HTTP 服务器、套接字服务器、某种 subprocess.Popen() hacks。坦率地说,我不知道。

有没有人有任何想法来完成这样的任务?

4

5 回答 5

3

更轻松。我从 Python 中使用了 Accessibility API,这一切都让我可以轻松地做到这一点,而无需任何 Cocoa / Carbon。

对于感兴趣的人,它被称为atomac。

于 2012-07-09T22:22:14.787 回答
2

PyObjC也许是您正在寻找的:

PyObjC(发音为 pie-obz-see)是使在 Python 中编写 Cocoa 应用程序成为可能的关键部分。它使 Python 对象能够向 Objective-C 对象发送消息,就好像它们是 Python 对象一样,并且同样有助于 Objective-C 对象向 Python 对象发送消息作为兄弟。

您可以使用 PyObjC 在您的 python 应用程序和可可应用程序之间建立一座桥梁。

于 2012-07-09T12:45:19.443 回答
0

有很多方法可以在两个应用程序之间同步/通信数据,但让我解释一下最简单的:

RESTful 序列化:
将对象序列化为 XML/JSON 或两个应用程序框架都可以解析的任何其他自定义格式。例如。http://docs.python.org/library/json.html
如果两个应用程序都在同一台服务器/机器上,我希望您所要做的就是将数据编码/存储到同一个文件中并读取/解析来自其他应用程序中各个文件的数据。

否则,您可能需要创建一个 Web 服务来访问数据文件。

如果您有进一步的疑问,请在评论中告诉我。

于 2012-07-09T09:32:54.560 回答
0

在我看来,在两个应用程序之间建立通信的最简单方法是客户端-服务器协议XMLRPCCocoaPython都支持它。

Python 部分相当简单:

import xmlrpc.client
rpcProxy = xmlrpc.client.ServerProxy(URL_OF_SERVER)
rpcProxy.SendKeyToApp(pid,key)

至于 Cocoa 部分,我不知道,但似乎有可能:XML-RPC Server in CocoaBest way to use XML-RPC in Cocoa application?

于 2012-07-09T09:33:13.950 回答
0

上,许多原生应用程序支持 AppleScript(又名 OSA)作为它们的原生脚本 API。因此,您的问题变成了 Python 和 Applescript 之间的交互(并首先弄清楚如何在 AppleScript 中与您的目标应用程序对话)。

Python 标准库和第三方模块py-applescript中有一些 OSA 支持,您可能想看看。

于 2015-09-30T04:45:38.163 回答