关闭时从另一个应用程序打开 Spotify 主窗口
Posted
技术标签:
【中文标题】关闭时从另一个应用程序打开 Spotify 主窗口【英文标题】:Open Spotify main window from another app when closed 【发布时间】:2013-06-04 23:36:35 【问题描述】:我正在开发一个尝试扩展某些 Spotify 功能的应用程序(而不是其他客户端)。当我的图标在停靠栏上单击时,我想显示 Spotify 的主窗口 - 即使 Spotify 中的主窗口已关闭。
这是我现在的代码:
- (void) applicationDidBecomeActive:(NSNotification *)notification
// Causes Spotify to hit the front when selecting it!
[[[NSRunningApplication
runningApplicationsWithBundleIdentifier:@"com.spotify.client"] lastObject]
activateWithOptions:NSApplicationActivateAllWindows];
它在窗口打开但不在焦点(背景)时起作用,但在我关闭 Spotify 主窗口时不起作用(我通常会这样做)。如果从其他应用程序关闭此窗口,有什么方法可以重新打开它?
Spotify 图标可以做到这一点(显然)。尝试点击关闭按钮(红色 x)并按下图标(它会重新出现)。这可能来自另一个应用程序吗?
【问题讨论】:
【参考方案1】:Dock 将reopen
Apple 事件发送到您单击的应用程序,然后应用程序执行它认为合适的代码。要模拟 Dock 单击,您需要手动将 reopen
事件发送到应用程序。
Apple Documentation on the matter 声明 reopen
事件的 ID 为 rapp
代码 (kAEReopenApplication
),并且是 kCoreEventClass
类的一部分。
从那里开始,在代码中构建 Apple 事件并将其发送到应用程序相对简单。请注意,您确实应该从 AESendMessage
调用中进行一些错误检查,因为如果应用程序未启动等事件可能会失败 - 我还没有真正测试过这些情况。
这是我的解决方案。请注意,您需要保留原始代码才能将应用程序置于最前面 - Apple 事件不会更改应用程序顺序。
NSAppleEventDescriptor *target = [[NSAppleEventDescriptor alloc]
initWithDescriptorType:typeApplicationBundleID
data:[@"com.spotify.client" dataUsingEncoding:NSUTF8StringEncoding]];
NSAppleEventDescriptor *event = [[NSAppleEventDescriptor alloc]
initWithEventClass:kCoreEventClass
eventID:kAEReopenApplication
targetDescriptor:target
returnID:kAutoGenerateReturnID
transactionID:kAnyTransactionID];
AESendMessage(event.aeDesc, NULL, kAEWaitReply | kAENeverInteract, kAEDefaultTimeout);
【讨论】:
谢谢!这完美!不完全确定它的详细工作原理,因此感谢您在答案中添加一些有用的链接! :) 我的应用程序需要 Spotify 才能运行,所以我会研究一些方法来确保它可以运行,也感谢您指出这一点!以上是关于关闭时从另一个应用程序打开 Spotify 主窗口的主要内容,如果未能解决你的问题,请参考以下文章