macos - 防止点击 NSWindow/NSView 时激活应用程序

标签 macos cocoa screenshot nswindow nspanel

我正在开发一个屏幕截图 Mac 应用程序。我正在尝试重建按下 Cmd-Ctrl-Shift-4 时发生的情况:十字准线光标和屏幕截图的选择矩形。

我在所有其他窗口之上使用自定义无边框 NSWindow。我禁用了光标来绘制自己的选择矩形。

我的问题是,一旦我单击并拖动来捕获屏幕截图,我的应用程序就会被激活(因为单击被我的屏蔽窗口拦截)。<​​/p>

有没有一种方法可以让我在自定义 View /窗口中接收点击,而无需激活我的应用程序?

我尝试使用带有 NSNonactivatingPanelMask 标志的 NSPanel ,但在这种情况下,我的光标出现问题:当另一个应用程序时我无法绘制自己的光标处于事件状态,因为我无法隐藏其他应用程序的光标...

最佳答案

事实上,我对这个问题有一个新的、更好的答案,涉及更多未记录的好东西。这是为了将来的后代:

NSWindow 上有一个未记录的方法,它可以完全满足您的需求:

@interface NSWindow (Private)
- (void )_setPreventsActivation:(bool)preventsActivation;
@end

[myWindow _setPreventsActivation:true];

当用户单击窗口时,这会阻止窗口激活其自身及其应用程序。

关于使用未记录的 API 的标准警告当然适用:Apple 可能会在某些时候更改此设置(尽管它已经存在于许多 OS X 版本中,因此很有可能不会),并且使用此设置可能会导致您的应用程序被拒绝Mac 应用商店。

关于macos - 防止点击 NSWindow/NSView 时激活应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728111/

相关文章:

c++ - 使用基于 Qt 的应用程序从 Finder 打开文件?

cocoa - 这个键盘快捷键控制是什么?

Android - 如何在没有画廊 Intent 的情况下阅读屏幕截图

python - 网站抓取和截图

macos - Cocoa 应用程序在 Macbook Pro 与 Mac Mini 上的呈现方式不同

xcode - 设置 NSSplitViews 的最小宽度

c++ - 为什么 clang 编译器标志的顺序会影响生成的二进制大小?

macos - viewDidLoad 未触发

objective-c - 设置 PopUpButton 的操作

android - 安卓截图