我已经建立了一个全球热键RegisterEventHotkey.当用户按下它时,它会获得当前聚焦的窗口CGWindowListCopyWindowInfo,然后我需要将它始终置于顶部.
如果当前窗口在我的进程中(我从中执行代码)我可以简单地将windowNumberfrom 转换CGWindowListCopyWindowInfo为a NSWindow并执行setLevel:
nswin = [NSApp windowWithWindowNumber:windowNumber]
[nswin setLevel: Int(CGWindowLevelForKey(kCGFloatingWindowLevelKey))]
Run Code Online (Sandbox Code Playgroud)
我的问题如果当前关注的窗口不在我的进程中,我无法做到这一点.你能告诉我怎么样吗?
我试过的东西:
我碰到过CGSSetWindowLevel的CGPrivate.h-无证的东西- https://gist.github.com/Noitidart/3664c5c2059c9aa6779f#file-cgsprivate-h-L63 -但是我记得我试过在过去这样的事情,但我想会得到一个错误连接到不在调用进程中的窗口.
只有窗口的所有者才能操纵它.因此,Apple拥有一个拥有所有窗口的通用所有者的概念,并且可以操纵它们.一次只能有一个通用所有者(Dock).
也许,无论如何,假装我的呼叫过程暂时成为码头?也许CGSGetConnectionIDForPSN对于码头然后使用该连接?
我的用法:我正在尝试复制我的开源,免费,浏览器插件的功能 - https://addons.mozilla.org/en-US/firefox/addon/topick/ - 所以我的调用过程如果Firefox.它现在适用于Windows和Linux,只需要弄清楚如何在Mac中为非Firefox窗口做这件事.
我的应用程序在全屏模式下,我需要像iOS的UIPopoverController.第一个想法是使用NSPanel,但我无法在全屏视图前显示它.
我需要一个类似UIPopoverController的Cocoa类或一种在全屏视图前显示NSPanel的方法.我怎么能做到这一点?