【问题标题】:How to programmatically make cocoa application active如何以编程方式使可可应用程序处于活动状态
【发布时间】:2019-02-12 19:14:18
【问题描述】:

我有一个后台进程,当按下热键时会出现一个透明窗口:

[window makeKeyAndOrderFront:nil];
[[content animator] setAlphaValue:1.0]; // alpha was 0.0

...窗口在其他窗口的前面显示得很好(如我所愿),但是在我手动单击窗口之前,当窗口出现时处于活动状态的任何应用程序都保持活动状态。我期待“makeKeyAndOrderFront”也可以使应用程序处于活动状态,但是在我的 -applicationWillBecomeActive 中添加一个 NSLog 行表明它在执行鼠标单击之前没有收到任何活动通知。

有谁知道我如何在我发出 -makeKeyAndOrderFront 的同时设置我的应用程序处于活动状态?我需要它处于活动状态,以便它可以开始接受键盘输入 - 需要任何帮助:-)

【问题讨论】:

  • 不要这样做 - Mac 应用程序通常不会有充分的理由窃取焦点。
  • 但是在这种情况下,焦点应该在他的应用程序中,因为用户使用了热键。
  • @AlBlue“一般”。很多优秀的应用都在做“一般”不做的事情。

标签: objective-c cocoa macos nsapplication


【解决方案1】:

[[NSApplication sharedApplication] activateIgnoringOtherApps : YES];

【讨论】:

  • 谢谢!!! - 我正在用 NSRunningApplication 的 -activateWithOptions 尝试一些东西,但我尝试的一切都导致了一个沙滩球......
【解决方案2】:

对于 10.6 或更高版本

[[NSRunningApplication currentApplication] activateWithOptions:(NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps)];

【讨论】:

  • 放置这个的最佳位置? applicationDidFinishLaunching?
  • 感谢您的回答。我有一个多窗口应用程序,除非设置了NSApplicationActivateAllWindows,否则它无法正确激活。
【解决方案3】:

Swift 4.2+ of @Arvin 回答

NSRunningApplication.current.activate(options: [.activateIgnoringOtherApps, .activateAllWindows])

【讨论】:

  • 这帮助我找到了我在 Xamarin MacOS 中需要的东西 NSRunningApplication.CurrentApplication.Activate(NSApplicationActivationOptions.ActivateIgnoringOtherWindows);
猜你喜欢
  • 2020-10-19
  • 2018-10-31
  • 1970-01-01
  • 2011-06-11
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多