在启动另一个应用程序时可以启动一个应用程序的编程机制是什么?
例如,在启动 iTunes 时,Last.fm 桌面也会启动。
还是只是替换某种“批处理文件”的问题?
注意: OS X 新手。
在启动另一个应用程序时可以启动一个应用程序的编程机制是什么?
例如,在启动 iTunes 时,Last.fm 桌面也会启动。
还是只是替换某种“批处理文件”的问题?
注意: OS X 新手。
没有指定依赖应用程序的标准方法。所以,你需要以某种方式观察系统。您不必主动投票;你需要用一些系统机制来告诉你。
要监视 GUI 应用程序的启动,您需要编写一个后台应用程序,通过以下方式获取 NSWorkspace 的通知中心
NSNotificationCenter* nc=[[NSWorkspace sharedWorkspace] notificationCenter];
并注意 NSWorkspaceDidLaunchApplicationNotification。见Apple doc
。
要监视非 GUI 应用程序的启动,您需要使用kqueue
. (这是 BSD 功能。)请参见手册页。通常,您必须注意launchd
或fork
处理execve
。请注意,有多个launchd
进程,一个用于 root,一个用于每个登录用户。
在任何情况下,您都需要自动启动您编写的后台应用程序。有很多方法可以做到这一点。
要监视文件或目录的变化,可以使用launchd
代理。请参阅手册页。
顺便说一句:官方Last.fm
应用程序在首次启动时会安装AudioScrobbler.bundle
在~/Library/iTunes/iTunes Plug-ins
. iTunes 会在启动时读取所有插件,然后插件会启动 Last.fm 应用程序。这是对界面的一种相当骇人听闻的、非宽恕的用法,因为该插件是用于可视化工具的。请参阅Apple 文档。