Я пытаюсь определить положение и ширину Mac OS X Dock в моем приложении C ++ / Qt.
Но я могу только найти способы получить доступное пространство рабочего стола, это означает, что я могу получить высоту дока, но не ширину.
Есть ли способы получить положение и ширину дока с помощью встроенного API ОС?
Не видит, что такое возможно, даже из API Apple, тем более из Qt.
Единственное решение, которое приходит на ум, довольно грубое, — сделать снимок экрана и использовать базовое распознавание изображений, чтобы найти положение и размеры дока.
Это может помочь в решении без взлома, NSScreen предоставляет метод (visibleframe
), который вычитает меню и док-станцию из размера экрана. frame
Метод содержит оба.
[NSStatusBar systemStatusBar].thickness
вернет высоту строки меню.
https://developer.apple.com/reference/appkit/nsscreen/1388369-visibleframe?language=objc
Вы можете определить положение дока, сравнивая -[NSScreen visibleFrame]
(что исключает пространство, занимаемое док-станцией и строкой меню) с -[NSScreen frame]
который охватывает всю ширину экрана и высоту.
Пример кода ниже зависит от экрана, на котором находится окно. Этот код может быть адаптирован для работы с несколькими дисплеями путем перечисления на всех экранах вместо использования экрана окна.
// 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");
}