如何在 Swift 或 Objective-C 中获取 MacOS Dock 的宽度?

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

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

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

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

有人有什么想法或提示去哪里看吗? ...除了 - 暴力 - 截屏并分析它。

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

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

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

考虑到 Dock 始终居中,您需要获取此方法返回的

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