如何在macOS上通过编程方式获取当前工作区

5
我希望能够在macOS 10.13上以编程方式随时确定用户当前正在使用哪个任务控制工作区。 在我的搜索过程中,我找不到任何有效的答案。 可以使用任何语言和任何工作区标识符(uuid、工作区编号等)。 谢谢您的帮助!

1
在我下面发布了我的“工作答案”之后,我为自己创建了一个“菜单栏图标”,它由一个简单的.sh脚本组成... #!/bin/bash _/¯ osascript /Users/myComputerName/.config/bitbar/Workingspace_Desktop.app ... 简单地放置在第三方(“BitBar”)插件文件夹中,调用一个AppleScript,如果BGname是“Sierra.jpg”,则将BGname设置为“[1]”等,在我的右侧菜单栏中显示[1]或[2]或[3]或[4]。如果你读到这里,你会猜到任何消息都可以永久地显示... - clemsam lang
3个回答

8
  • 下载私有CGSInternal头文件
  • 将它们放置在系统上的一个文件夹中
  • 在您的项目 构建设置(Build Settings) 中将该文件夹添加到用户头文件搜索路径(User Header Search Paths)

然后,您可以这样做:


#import "AppDelegate.h"
#import "CGSInternal/CGSSpace.h"

@implementation AppDelegate

typedef int CGSConnection;
extern CGSConnection _CGSDefaultConnection(void);

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    CGSSpaceID activeSpace = CGSGetActiveSpace(_CGSDefaultConnection());
    NSLog(@"activeSpace: %zu", activeSpace);

    CFArrayRef spaceArray = CGSCopySpaces(_CGSDefaultConnection(), kCGSAllSpacesMask);
    NSLog(@"allSpaces: %@", spaceArray);
}

@end

嗨,我对这个问题有一些扩展。我的目标是将应用程序创建的窗口放在前面。因此,我使用CGSSpaceCreate创建一个新空间,并希望使用CGSSpaceSetAbsoluteLevel设置它的优先级高于所有其他窗口,但我该如何找出应该在级别中输入什么?谢谢! - Zohar81
@Zohar81,CGSSpaces API 可能不是你尝试做的最好选择。我曾经试图使用它来创建空间,但是我无法成功。我认为需要更多的逆向工程才能揭示完成此操作所需的所有功能。但也许你可以通过在你创建的 NSWindow 上调用 makeKeyAndOrderFront:toggleFullscreen: 来实现你想要的效果。 - Noah Nuebling

3
如果您想要一个“可行的答案”,可以使用间接GUI“变量”来告诉您当前位置: tell application "System Events" to text items 27 thru -1 of item 1 of (picture of every desktop as list) as string(<=更短但不正确)
set delimOrgs to text item delimiters
set text item delimiters to {"/"}
tell application "System Events" to set BGpict to ¬
     last text item of (picture of current desktop as text)
set text item delimiters to delimOrgs
return BGpict                         [improved: user3439894's suggestion]

……例如,它在我的4个工作区之一上返回"Lion.jpg",在另一个工作区上返回"Sierra.jpg",这意味着我先使用了第3个桌面,现在正在使用第1个桌面。


谢谢,这很实用! - Louis M
有什么理由让任何人投票反对这个实际帮助了某人并明确标记为“工作解决方案”的答案?!?我不理解这里的一些“用户”...“太可悲了”;-)。 - clemsam lang
谢谢,这也解决了我的问题。你认为你能将它转换成JXA吗? - bubakazouba

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接