macos — Как узнать положение, ширину и высоту Mac OS X Dock? Какао / Carbon / C ++ / Qt

Я пытаюсь определить положение и ширину Mac OS X Dock в моем приложении C ++ / Qt.
Но я могу только найти способы получить доступное пространство рабочего стола, это означает, что я могу получить высоту дока, но не ширину.

Есть ли способы получить положение и ширину дока с помощью встроенного API ОС?

5

Решение

Не видит, что такое возможно, даже из API Apple, тем более из Qt.

Единственное решение, которое приходит на ум, довольно грубое, — сделать снимок экрана и использовать базовое распознавание изображений, чтобы найти положение и размеры дока.

0

Другие решения

Это может помочь в решении без взлома, NSScreen предоставляет метод (visibleframe), который вычитает меню и док-станцию ​​из размера экрана. frame Метод содержит оба.

[NSStatusBar system​Status​Bar].thickness вернет высоту строки меню.

https://developer.apple.com/reference/appkit/nsscreen/1388369-visibleframe?language=objc

5

Вы можете определить положение дока, сравнивая -[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");
}
0
По вопросам рекламы [email protected]