Il existe de nombreuses méthodes selon vos besoins. J'ai utilisé EnumDisplayMonitors() car j'avais besoin de tester chaque affichage pour voir s'il avait une barre des tâches. Une méthode pour le faire est:
Utilisez EnumDisplayMonitors() pour obtenir une liste de tous les moniteurs.
MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
L'intérieur du rappel vous donnera une poignée pour un affichage. Avertissement cette fonction énumérera également les affichages virtuels: À l'aide de la poignée de l'affichage, utilisez GetMonitorInfo() avec la poignée à l'affichage.
Cela retournera le nom de l'affichage avec deux structures RECT l'une de la position d'affichage et la résolution, l'autre RECT sera la zone de travail. Vous aurez besoin de faire deux vérifications (une pour le X, une pour le Y) pour voir s'il y a une barre des tâches sur le moniteur et la hauteur ou la largeur de la barre des tâches.
Par exemple abord, nous vérifions l'axe 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;
}
Ensuite, nous vérifions l'axe 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;
}
La hauteur ou la largeur, en fonction de la position, de la barre des tâches sera généralement le respectivement la hauteur ou la largeur du moniteur, bien que cela ne soit pas toujours le cas.
Il peut y avoir plusieurs barres de tâches. Ou aucun si la fenêtre n'est pas affichée sur le moniteur principal. Ce n'est pas une bonne approche. –
Cela semble être l'approche la plus simple. Je ne suis pas concerné par plusieurs moniteurs ou quelque chose d'improbable pour le moment. –
Ceci est un hack non documenté. –