如何在Mac OSx上处理来自外部程序的数据

如何在Mac OSx上处理来自外部程序的数据,c,cocoa,macos,external,handle,C,Cocoa,Macos,External,Handle,我想制作一个程序(我更喜欢C语言),但即使是cocoa,也可以从外部程序(如iTunes或adium)获取数据并使用它们。例如,我希望获取列表框的数据或聊天的文本,以便对其进行操作。我需要一个开始的地方。在windows中,我认为一些API可以找到窗口的hWnd,然后找到指向列表框或文本框的指针。请给我一些关于如何开始的信息。提前谢谢你。不清楚你到底想做什么。这要么是不可能的,要么是严格限制的 首先,不同的应用程序使用不同的方式构建“列表框”——Cocoa应用程序使用NSTableView,Ca

我想制作一个程序(我更喜欢C语言),但即使是cocoa,也可以从外部程序(如iTunes或adium)获取数据并使用它们。例如,我希望获取列表框的数据或聊天的文本,以便对其进行操作。我需要一个开始的地方。在windows中,我认为一些API可以找到窗口的hWnd,然后找到指向列表框或文本框的指针。请给我一些关于如何开始的信息。提前谢谢你。

不清楚你到底想做什么。这要么是不可能的,要么是严格限制的

首先,不同的应用程序使用不同的方式构建“列表框”——Cocoa应用程序使用NSTableView,Carbon应用程序使用DataBrowser,GTK、Qt和Java应用程序使用更多不同的API。这些并不是都经过某种常见的列表框;每个都是独立的实现

(您可以希望NSTableView或DataBrowser基于另一个,但不要指望它。)

另一方面,不可能获得指向该控件的指针。您无法访问另一个应用程序的NSTableView或DataBrowser视图或GTK/Qt/Java等效视图,除非该应用程序有意将其提供给您(这仅适用于NSTableView)。这听起来不像是你的情况

最接近这一点的是可访问性,它可能非常接近,但不太可能适用于大多数不基于Cocoa的应用程序

即使如此,视图也可能不会显示所有数据。表视图可能会被延迟填充,而模仿iOS UITableView设计的表视图甚至可能永远不会拥有所有数据(因为它只拥有可以显示的数据)

(以上所有内容适用于所有类型的视图,而不仅仅是表视图。集合视图、文本字段和按钮对所有视图都有相同的处理。)

获取数据的真实完整副本的唯一方法是询问拥有它的控制器。同样,如果应用程序没有专门提供给您,这是不可能的。更不用说,应用程序甚至可能没有控制器(不是面向对象的,不是MVC,或者只是做得太草率)

…以便操纵它

首先获取数据是很容易的。在另一个应用程序中处理数据几乎是不可能的


最接近这些目标的是可访问性界面。

非常感谢您的回答。这很有帮助。所以,我唯一能做的就是OCR?(我知道工作真的很难)。我知道你是adium开发者之一,所以让我们以adium为例:将在线联系人的姓名保存到数组的唯一方法是字符识别?例如,扑克软件跟踪器是如何从游戏中挖掘数据的?顺便说一句,祝贺你在adium和growl上的出色工作。这是我建议某人在mac上安装的前两件事:-)OCR的可靠性甚至更低。首先,OCR无论如何都很难。另一方面,它只适用于在视图中完全可见的任何文本。任何被切断的内容,或视图知道但未显示在屏幕上的内容(例如,比用户滚动的内容更向下或向上),都将不可见。我对扑克软件跟踪器一无所知。对于Adium,您可以通过AppleScript询问联系人列表。对于一般的应用程序来说,最接近的是可访问性。并代表Adium和Growl的所有开发者向您表示感谢。