如何获取 macOS Dock 的宽度?

问题描述 投票:0回答:1

我想要/需要在 macOS 14+ 系统扩展坞左侧或右侧的“空白”区域(当位于底部时)放置一个类似扩展坞的窗口。

获取底座的高度很容易,例如如图所示: 如何获取 Mac OS X Dock 的位置、宽度和高度?可可/碳/C++/Qt

但是获得码头的实际宽度或尺寸,以及码头左右两侧未覆盖的空间似乎是不可能的。

除了暴力、截屏并分析之外,有没有人有任何想法或提示可以查看?

我遵循了我能找到的任何提示,尝试了我能找到的一切。但似乎没有 API 支持(直接或间接)检索 Dock 的大小(高度和宽度)。

swift objective-c macos dock
1个回答
1
投票

您可以使用如下调用 AppleScript 来共同破解解决方案;请预先警告,这确实需要您的应用程序在系统偏好设置中被列入白名单作为辅助功能应用程序,然后才能起作用。

假设 Dock 居中(请参阅下面的注释 1),您需要获取此方法返回的

int
值,并从 屏幕本身的全宽度 中减去它;该计算的结果,然后减半,应对应于屏幕上 Dock 两侧的空间量。

- (int) getDockWidth {
    // Define AppleScript source code to execute
    NSString *appleScriptSource = @""
    "tell application \"System Events\" to tell application process \"Dock\" to set dockSize to the size of list 1\r"
    "return dockSize";
    
    // Create landing zone for the error dictionary that NSAppleScript can dump error information to
    NSDictionary *errorDict = NULL;
    NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:appleScriptSource];
    NSAppleEventDescriptor *eventDescriptor = [appleScript executeAndReturnError:&errorDict];
    if (errorDict != NULL) {
        [NSException exceptionWithName:@"Error executing AppleScript" reason:nil userInfo:errorDict];
    }
    return [[eventDescriptor descriptorAtIndex:1] int32Value];
}

一些注意事项:

  1. 此方法不考虑 Dock 何时固定在屏幕上不同于居中默认位置的特定位置。
  2. 在当前形式下,此方法目前也不支持用户将 Dock 移动到屏幕底部(即左侧或右侧)以外的任何其他位置的场景,尽管通过添加来检测是微不足道的还有几行代码。
  3. 可能有一种更好、更原生的方法可以通过 Accessibility API 来完成此操作,而无需涉及 AppleScript。我个人只是不知道这在实践中会是什么样子。
© www.soinside.com 2019 - 2024. All rights reserved.