macos – 我的Mac服务停用前台应用程序

前端之家收集整理的这篇文章主要介绍了macos – 我的Mac服务停用前台应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Mac应用程序中编写了一个 Cocoa服务.当我在另一个应用程序中并触发服务时,即使服务代码完全为空:

- (void)doMyService:(NSPasteboard*)pasteboard
        userData:(NSString*)userData 
        error:(NSString**)error {
}

…应用程序的窗口已停用,我的窗口被提前.即使我的应用程序设置为在无停靠模式下运行(LSUIElement = false)也是如此.即使我的应用程序没有自己的窗口,前台应用程序的窗口也会被停用!

我已经尝试在服务处理程序中停用我的应用程序;没运气.隐藏我的应用程序从服务处理程序似乎工作,但只有当用户使用上下文菜单,而不是键组合触发服务,并且只有当我们没有在无停靠模式下运行时(我希望我的应用程序无需对接) .

如何阻止前台应用程序停用,或者至少能够重新激活它?

解决方法

好的,这个问题是6个月大,所以你现在可能已经解决了你的问题,但是如果有用的话……

我通过NSWorkspace观察应用程序停用,解决了我正在处理的应用程序的类似问题.

你可以拥有一个房产:

NSRunningApplication* _prevIoUsRunningApplication;

并通过观察NSWorkspaceDidDeactivateApplicationNotification来更新此属性

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                       selector:@selector(anyApplicationDeactivated:)
                                                           name:NSWorkspaceDidDeactivateApplicationNotification
                                                         object:nil];


// Called when any running application deactivates
-(void)anyApplicationDeactivated:(NSNotification*) notification {
    NSRunningApplication* app = [notification.userInfo valueForKey:NSWorkspaceApplicationKey];
    _prevIoUsRunningApplication = app;
}

然后当您的应用程序完成执行时,只需使用以下命令激活以前处于活动状

// Activate the prevIoUsly active application (if available)
[_prevIoUsRunningApplication activateWithOptions:0];

如果在您的应用程序未处于活动状态时有可能调用最后一行,那么应首先检查它是否正在使用[NSApp isActive](或者您可能会为用户触发一些令人惊讶且烦人的行为……)

如果你找到了一个更简单的解决方案,我有兴趣听听它.

如果这段代码对任何人都有用,我已经创建了一个单独的类来处理它并将其检入Github:

http://github.com/mjrit/MJRAppReactivation

猜你在找的cocoa相关文章