我正在尝试获取我的C++/Qt应用程序中Mac OS X Dock的位置和宽度。但我只能找到获得桌面可用空间的方法,这意味着我可以获得Dock高度,但不能获得宽度。
有没有办法使用原生操作系统API获取Dock的位置和宽度?
发布于 2016-03-16 06:26:04
即使是在苹果的应用程序接口中,也看不到这样的事情是可能的,更不用说Qt了。
脑海中浮现的唯一解决方案,一个相当粗糙的解决方案,是截图并使用一些基本的图像识别来找到码头的位置和尺寸。
发布于 2017-03-20 16:13:58
这可能对无黑客攻击的解决方案有所帮助,NSScreen提供了一个方法(visibleframe
),它可以从屏幕尺寸中减去菜单和Dock。frame
方法同时包含这两种方法。
[NSStatusBar systemStatusBar].thickness
将返回菜单栏的高度。
https://developer.apple.com/reference/appkit/nsscreen/1388369-visibleframe?language=objc
发布于 2018-08-01 07:46:38
要扩展MacAndor的答案,您可以通过比较-[NSScreen visibleFrame]
(不包括dock和菜单栏占用的空间)和包含整个屏幕宽度和高度的-[NSScreen frame]
来推断dock位置。
下面的示例代码依赖于窗口所在的屏幕。此代码可以通过枚举所有屏幕而不是使用窗口的屏幕来适用于多个显示。
// Infer the dock position (left, bottom, right)
NSScreen *screen = [self.window screen];
NSRect visibleFrame = [screen visibleFrame];
NSRect screenFrame = screen.frame;
if (visibleFrame.origin.x > screenFrame.origin.x) {
NSLog(@"Dock is positioned on the LEFT");
} else if (visibleFrame.origin.y > screenFrame.origin.y) {
NSLog(@"Dock is positioned on the BOTTOM");
} else if (visibleFrame.size.width < screenFrame.size.width) {
NSLog(@"Dock is positioned on the RIGHT");
} else {
NSLog(@"Dock is HIDDEN");
}
https://stackoverflow.com/questions/35826550
复制相似问题