我希望能够在macOS 10.13上以编程方式随时确定用户当前正在使用哪个任务控制工作区。
在我的搜索过程中,我找不到任何有效的答案。
可以使用任何语言和任何工作区标识符(uuid、工作区编号等)。
谢谢您的帮助!
构建设置(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
设置它的优先级高于所有其他窗口,但我该如何找出应该在级别中输入什么?谢谢! - Zohar81CGSSpaces
API 可能不是你尝试做的最好选择。我曾经试图使用它来创建空间,但是我无法成功。我认为需要更多的逆向工程才能揭示完成此操作所需的所有功能。但也许你可以通过在你创建的 NSWindow
上调用 makeKeyAndOrderFront:
或 toggleFullscreen:
来实现你想要的效果。 - Noah Nueblingtell 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个桌面。
看起来这需要使用未记录的API调用。
https://github.com/asmagill/hs._asm.undocumented.spaces/blob/master/CGSSpace.h
而且
CG_EXTERN CGSSpaceID CGSGetActiveSpace(CGSConnectionID cid);
可能是您想要的,但这段代码已经三年没有接触过了,因此系统/ api 可能已经迁移,并且使用未记录的 API 的所有问题都适用。
在项目 https://github.com/asmagill/hs._asm.undocumented.spaces 中找到了这个。
我没有使用或验证过它。
#!/bin/bash _/¯ osascript /Users/myComputerName/.config/bitbar/Workingspace_Desktop.app
... 简单地放置在第三方(“BitBar”)插件文件夹中,调用一个AppleScript,如果BGname是“Sierra.jpg”,则将BGname设置为“[1]”等,在我的右侧菜单栏中显示[1]或[2]或[3]或[4]。如果你读到这里,你会猜到任何消息都可以永久地显示... - clemsam lang