为屏幕上的所有应用程序窗口访问 NSWindow.level

PLG*_*PLG 9 macos cocoa accessibility core-graphics objective-c

我正在尝试操作 macOS 的窗口。我找到了以下网址:

这些链接允许通过 macOS 的辅助功能 API 访问应用程序的各种窗口;更具体地说,他们使用该AXUIElementRef元素来重新定位窗口。

在为 macOS 创建应用程序时,我成功使用了以下代码...

@implementation CustomWindow

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation
{
    self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation];
    if(self)
    {
        [self setLevel:kCGDesktopWindowLevel - 1];
        [self setCollectionBehavior:
         (NSWindowCollectionBehaviorCanJoinAllSpaces |
          NSWindowCollectionBehaviorStationary |
          NSWindowCollectionBehaviorIgnoresCycle)];
    }
    return self;
}

// ...

@end
Run Code Online (Sandbox Code Playgroud)

... 在屏幕的桌面级别放置一个窗口。我正在寻找的是一种通过自定义 Windows 管理器应用程序操作相同窗口级别属性等的方法。换句话说,我想编写一个窗口管理器,可以在屏幕上操纵其他应用程序的窗口级别。

是,我在我的发现中纠正了这是不可能的吗?可以通过 Core Graphics 完成吗?

另外,我想改变重点和重点的应用程序,但我认为这是可以做到的。

num*_*ist 0

您无法真正操纵CGWindowLevel窗口的 的 (kCGNormalWindowLevel例如,所有普通窗口都是 ),但如果您希望更改普通级别窗口相对于其他窗口的顺序,那么您可能正在寻找 Accessibility 的kAXRaiseAction,您可以请参阅此处的实际操作

如果您只是想查看系统上的所有窗口是什么(以及它们的CGWindowLevels),那么CGWindowListCopyWindowInfo将为您提供该信息。