访问 Cocoa 和/或 Carbon 以在 OS X 上自动启动(在 C++ 上也使用 QT)

Posted

技术标签:

【中文标题】访问 Cocoa 和/或 Carbon 以在 OS X 上自动启动(在 C++ 上也使用 QT)【英文标题】:Access Cocoa and/or Carbon to automatically start on boot on OS X (on C++ also using QT) 【发布时间】:2010-08-11 20:21:27 【问题描述】:

我有一个使用 QT 框架的 C++ 应用程序。我正在尝试为用户添加一个选项,以便能够将程序设置为在启动时自动启动。

我的开发机器运行的是 OS X 10.6。

作为我的主要 Mac 参考资料,我使用的是 this Apple documentation。根据文档,有两种推荐的方法。一种是使用 Cocoa Shared Files List API,它仅适用于 OS X 10.5 或更高版本。另一种是使用 Carbon Apple Events API,虽然文档中没有明确说明,但从我的阅读来看,它似乎只适用于 OS X 10.5 或更低版本。

根据this QT documentation 我应该可以做到这一点。但是,我似乎无法弄清楚如何使这两种方法都起作用。

对于 Cocoa 共享文件列表 API,我遵循了来自 this answer 的建议,但我似乎无法弄清楚要包含哪些文件才能使其在我的项目中正常工作。像 LSSharedFileListRef 这样的东西是未定义的。我正在尝试做的事情甚至可以从 C++ 中实现吗?

对于 Carbon Apple Events API,我尝试使用来自 Apple 的 own example 的代码。然而,包括似乎并没有像网上所有的例子所暗示的那样定义我需要的所有东西。例如,DescType 未定义,示例不起作用。这是因为我在 OS X 10.6 上吗?

总的来说,我可以做些什么来让我的程序在启动时启动,理想情况下支持所有 Mac OS X 10.4 及更高版本?

【问题讨论】:

仍然支持苹果事件管理器;它既不被弃用也不可用。 【参考方案1】:

如果您想支持 10.4 及更高版本,则需要使用 Carbon Apple Events API。

如果您将基本 SDK 设置为 10.4u 或 10.5,您链接到的示例代码在我的 OS X 10.6 机器上运行没有任何问题。如果你想用 10.6 SDK 编译它,你需要删除几行,但如果你想支持 10.4 及更高版本,那不是你想要的。

顺便说一句,用户可以通过使用“系统偏好设置”的“帐户”窗格轻松设置程序以在登录时启动。因此,我认为您不需要自己提供复选框。

【讨论】:

以上是关于访问 Cocoa 和/或 Carbon 以在 OS X 上自动启动(在 C++ 上也使用 QT)的主要内容,如果未能解决你的问题,请参考以下文章

MAC OS X API知识摘抄

在没有 Cocoa 的情况下创建 OS X 窗口

进行 Carbon FSExchangeObjectsCompat 调用的 Cocoa 方法是啥?

什么是 Cocoa,和 Objective-C 有什么关系

Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或Po

停靠栏显示或隐藏时的事件