gpt4 book ai didi

cocoa - 如何检查当前空间是否为Dashboard?

转载 作者:行者123 更新时间:2023-12-03 16:29:11 26 4
gpt4 key购买 nike

示例代码为

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(activeSpaceDidChange:) name:NSWorkspaceActiveSpaceDidChangeNotification object:nil];

然后

- (void) activeSpaceDidChange:(NSNotification *)aNotification {
// code to check if current workspace is dashboard?
}

我想检查当前空间是否是仪表板?有什么想法吗?

最佳答案

我尝试的第一个想法是根据这个答案获取当前空间ID:Detecting when a space changes in Spaces in Mac OS X 。这里的问题是关键的 kCGWindowWorkspace 在 OSX 10.8 中已被弃用。所以没有直接的方法来获取这些信息。

在我的解决方案中,现在我检查不同的窗口或所有者,它们只是仪表板空间之一或所有其他空间:

  • 如果有一个 kCGWindowName.wdgt/ 结尾的窗口,则用户位于仪表板上
  • 如果有一个窗口具有 kCGWindowName == System Status Item ClonekCGWindowOwnerName == SystemUIServer | ,则用户不在仪表板上。查找器

那么为什么我不只使用 .wdgt/ 检查? -- 因为如果仪表板上现在有小部件,则它不起作用

那么为什么我要使用多个窗口检查呢? -.因为我不确定哪个窗口总是在所有空间上。至少系统状态项克隆Finder并不总是存在。

这里我的实现是将此函数作为类别添加到 NSWorkspace

- (BOOL) userIsOnDashboardSpace {

NSArray* windowsInSpace = (__bridge NSArray *) CGWindowListCopyWindowInfo(kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly, kCGNullWindowID);

NSUInteger indexOfWidget = [windowsInSpace indexOfObjectPassingTest:^BOOL(NSDictionary* obj, NSUInteger idx, BOOL *stop) {

if ([obj objectForKey:(id)kCGWindowName]) {
NSString *name = (NSString *)[obj objectForKey:(id)kCGWindowName];
if ([name isEqualToString:@"System Status Item Clone"]) {
*stop = true;
return false;
}
if ([name hasSuffix:@".wdgt/"]) {
*stop = true;
return true;
}
}
if ([obj objectForKey:(id)kCGWindowOwnerName]) {
NSString *name = (NSString *)[obj objectForKey:(id)kCGWindowOwnerName];
if ([name isEqualToString:@"SystemUIServer"]) {
*stop = true;
return false;
}
if ([name isEqualToString:@"Finder"]) {
*stop = true;
return false;
}
}

return false;
}];
return indexOfWidget != NSNotFound;

}

关于cocoa - 如何检查当前空间是否为Dashboard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com