Есть множество методов в зависимости от ваших потребностей.Я использовал EnumDisplayMonitors (), поскольку мне нужно было протестировать каждый дисплей, чтобы увидеть, есть ли на нем панель задач.Это можно сделать следующим образом:
Используйте EnumDisplayMonitors () , чтобы получить список всех мониторов.
MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
Внутри обратного вызова вы получите дескриптордисплей. Предупреждение: эта функция также будет перечислять виртуальные дисплеи: Используя дескриптор для дисплея, используйте GetMonitorInfo () с дескриптором для дисплея.
Это вернетимя дисплея вместе с двумя структурами RECT, одна из которых отображает положение и разрешение дисплея, а другая RECT будет рабочей областью.Вам нужно будет выполнить две проверки (одну для X, другую для Y), чтобы увидеть, есть ли панель задач на мониторе и высота или ширина панели задач.
Например, сначала мы проверяем Yось:
if(monitor->rcMonitor.top == monitor->rcWork.top &&
monitor->rcMonitor.bottom == monitor->rcWork.bottom)
{
std::cout << "There is no taskbar on the Y axis" << std::endl;
}
else
{
std::cout << "There is a taskbar on the Y axis" << std::endl;
int height = monitor->rcMonitor.bottom - monitor->rcMonitor.top;
int hieghtOfTaskbar = height - (monitor.rcWork.bottom - monitor.rcWork.top);
std::cout << "The height of the taskbar is: " << heightOfTaskbar << std::endl;
}
Затем мы проверяем ось X:
if(monitor->rcMonitor.right == monitor->rcWork.right &&
monitor->rcMonitor.left == monitor->rcWork.left )
{
std::cout << "There is no taskbar on the X axis" << std::endl;
}
else
{
std::cout << "There is a taskbar on the X axis" << std::endl;
int width = monitor->rcMonitor.left - monitor->rcMonitor.right;
int widthOfTaskbar = height - (monitor.rcWork.left - monitor.rcWork.right);
std::cout << "The width of the taskbar is: " << heightOfTaskbar << std::endl;
}
Высота или ширина панели задач, как правило, будет высотой или шириной монитора.соответственно, хотя это не всегда так.