Macos 将窗口直接放在活动窗口的后面

Macos 将窗口直接放在活动窗口的后面,macos,swift,cocoa,Macos,Swift,Cocoa,我想在具有最高窗口级别的窗口后面直接放置一个窗口,而不仅仅是我的应用程序中具有最高级别的窗口,而是所有活动应用程序的窗口 我的第一个想法是这样做 let activeWindow = //Problems finding a reference to this window. myWindow.makeKeyAndOrderFront(nil) activeWindow.makeKeyAndOrderFront(nil) 通过这种方式,我将获得对活动窗口的引用。将“我的窗口”放置在顶部,然后

我想在具有最高窗口级别的窗口后面直接放置一个窗口,而不仅仅是我的应用程序中具有最高级别的窗口,而是所有活动应用程序的窗口

我的第一个想法是这样做

let activeWindow = //Problems finding a reference to this window.

myWindow.makeKeyAndOrderFront(nil)
activeWindow.makeKeyAndOrderFront(nil)
通过这种方式,我将获得对活动窗口的引用。将“我的窗口”放置在顶部,然后将上一个活动窗口重新放置在顶部。然后所有其他的窗户都会被放在我的下面


有人知道怎么做吗?

您不能从其他应用程序为窗口创建NSWindow实例。您只能为应用程序的窗口设置窗口对象

您可以使用orderWindow_u2;:relativeTo:将一个窗口排列在另一个窗口的上方或下方,该窗口由其窗口编号标识。您可以从其他应用程序获取窗口的窗口编号。您可以使用NSWindow.WindowNumbers和选项NSWindowNumberInstallApplications从任何应用程序获取当前空间中所有窗口的窗口编号。结果列表中的第一个窗口编号是前面的编号

我不记得你不认为是窗口的窗口,比如菜单栏和Dock等,是否包括在这个列表中。我想是的

此外,窗口级别优先于排序操作,如orderWindow\uuu0:relativeTo:。也就是说,如果有多个浮动窗口,并且您的窗口是正常的非浮动窗口,则命令您的窗口紧跟在前浮动窗口的后面不会使其位于其他浮动窗口的前面。所有浮动窗口将始终位于所有正常、非浮动窗口的前面。因此,如果您希望您的窗口位于最前面的窗口后面,而不考虑其级别,则必须计算其级别,并将窗口设置为具有相同的级别。注意:设置窗口的级别会将其移动到该级别的前面

您还可以使用CGWindowList API获取有关windows的信息,例如CGWindowListCopyWindowInfo。尽管据我所知,它从未被正式记录,但该API返回的描述词典的kCGWindowNumber键似乎与Cocoa的窗口号相对应。其他一些键可能会帮助您过滤掉菜单栏和停靠等内容。同样,它们可以通过kCGWindowLayer为您提供其他应用程序窗口的窗口级别