单击NSWindow/NSView时阻止激活应用程序

Mar*_*ark 5 macos cocoa screenshot nswindow nspanel

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

我在所有其他窗户上使用自定义无边框NSWindow.我禁用光标以绘制自己的选择矩形.

我的问题是,只要我点击并拖动以捕获屏幕截图,我的应用就会被激活(因为我的屏蔽窗口拦截了点击).

有没有办法在我的自定义视图/窗口中接收点击而不启动我的应用程序?

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

Bra*_*red 0

祈祷现在有更好的方法来做到这一点,但是当我不得不做类似的事情时,我最终让我的窗口/视图忽略所有鼠标输入,然后我使用CGEventTap(参见Quarts 事件服务文档)全局捕获鼠标事件(不将它们从事件队列中删除)。我将它们手动映射到我的窗口,创建一个自定义副本NSEvent并手动将其分派到我的窗口。

这里的巨大缺点(除了复杂性之外)是我记得需要以 root 身份运行才能安装事件水龙头。但是,我认为有一种方法可以通过普遍访问获得许可。

我完全不确定NSEvent直接将自定义分派到窗口是否会产生与激活应用程序相同的副作用;特别是自 10.6 以来许多事情都发生了变化……我建议在追求之前进行一个简单的测试,看看这是否可行。