【问题标题】:Window Constantly Wants To Be On Top Of Others - XcodeWindow 总是想领先于其他人 - Xcode
【发布时间】:2012-12-20 02:55:36
【问题描述】:

我的应用有一些按钮可以打开这样的自动化工作流程:

- (IBAction)actionname:(id)sender {
    NSTaskname = [[NSTask alloc] init];
    [NSTaskname setLaunchPath:@"/usr/bin/automator"];
    NSArray *arguments;
    arguments = [NSArray arrayWithObjects:@"/Applications/appname.app/Contents/Resources/workflowname.workflow", nil];
    [NSTaskname setArguments:arguments];
    [NSTaskname launch];                                                                             
}

唯一的问题是,每一个都出现在我的应用程序窗口后面。此外,一个工作流会启动另一个应用程序,该应用程序也出现在窗口后面。

我该如何解决这个问题?

【问题讨论】:

  • 您应该将变量命名为“NSTaskname”以外的名称,因为该名称暗示 (a) 它是一个类(因为它的名称以大写字母开头),而不是变量,并且 ( b) 它指的是某种名称,而不是 NSTask 对象。

标签: objective-c xcode cocoa window automator


【解决方案1】:

您可能可以使用 NSRunningApplication 将您的 NSTask 进程置于最前面,其 PID 如下所示...

NSRunningApplication* app = [NSRunningApplication runningApplicationWithProcessIdentifier:[NSTaskname processIdentifier]];
[app activateWithOptions: NSApplicationActivateAllWindows];

如果您需要激活特定应用程序,例如启动另一个应用程序的工作流程,那么您可以使用应用程序的捆绑标识符来执行此操作。此示例将激活 Safari。

NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.Safari"];
[(NSRunningApplication*)[apps objectAtIndex:0] activateWithOptions: NSApplicationActivateAllWindows];

【讨论】:

  • 这些都不起作用。唯一的变化是它会闪烁到另一个应用程序,但随后又会立即返回。停用我的应用程序中的窗口怎么样?
  • 好吧,我给了你使用 NSRunningApplication 来操作活动应用程序的想法。你看过那个类,看看它还能做什么?我认为它可以帮助您从评论中获得想法。检查“隐藏”命令等。
猜你喜欢
  • 2013-06-29
  • 2012-03-22
  • 2016-01-13
  • 2015-06-06
  • 1970-01-01
  • 2016-07-07
  • 2013-09-12
  • 1970-01-01
  • 2014-08-09
相关资源
最近更新 更多