【发布时间】:2011-11-25 06:29:28
【问题描述】:
我在我的应用中为 URL 安装了 Apple 事件处理程序:
OSStatus e = AEInstallEventHandler( kInternetEventClass,
kAEGetURL,
NewAEEventHandlerUPP(AppleEventProc),
(SRefCon)this,
false);
如果我的应用程序正在运行,这将有效。但是,如果我的应用程序没有运行,则在浏览器中单击 URL 会启动应用程序,但我的处理程序没有收到 Apple 事件。我对 AEInstallEventHandler 的调用是在我的应用程序的启动阶段,在它到达消息循环之前。这不是我做的第一件事,但也不算太远。 (显然我已经正确设置了 plist,因为我在运行时收到了事件)
关于如何让它发挥作用的任何想法?
有趣的是,当 Chrome 开始处理 mailto URL 时,它会在命令行上传递“-psn_0_5100765”。这对我没有任何意义,有人知道它想告诉我什么吗?
注意:我已经设置了 Apple Event 调试并再次运行它。安装回调处理程序后,我肯定会在启动时收到 GURL 事件。但是我仍然无法弄清楚为什么我的回调没有被那个事件调用。
【问题讨论】:
-
您正在编写新的 Carbon 应用程序吗?为什么??!?无论如何...有什么方法可以将您的 AEInstallEventHandler 放入应用程序启动时调用的函数中? (想法是处理程序在处理 Carbon 事件之前就位,Apple 事件在没有处理程序的情况下弹出)
-
处理程序是在创建我的第一个对象期间安装的,并且肯定是在消息循环之前安装的。我正在开发一个没有时间移植到可可的现有应用程序。
-
-psn_0_5100765看起来像ProcessSerialNumber,这是一个较旧的(前碳时代)Mac 等效于进程 ID(有警告。)我怀疑0是高longPSN的,5100765是低long。大概是调用 Chrome 选项卡的 PSN。 -
看起来就是这样,虽然它存在于 Mozilla 源代码中,而不是 Chromium 源代码中。
标签: macos macos-carbon appleevents