Pas de dépendances
#define _WIN32_WINNT 0x0500 //w2k et + #include <stdio.h> #include <windows.h> void AfficherRect(LPRECT prect) { printf(" bas=%ld haut=%ld gauche=%ld droite=%ld\n",prect->bottom,prect->top,prect->left,prect->right); } BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM dwData) { MONITORINFOEX info; printf("Moniteur detecte :\n"); info.cbSize = sizeof(MONITORINFOEX); if (GetMonitorInfo(hMonitor,(LPMONITORINFO)&info)) //cast { printf(" Nom = %S\n",info.szDevice); //%S ou %s si UNICODE ou pas printf(" Principal : %s\n",(info.dwFlags==MONITORINFOF_PRIMARY)?("Oui"):("Non")); printf(" rcMonitor : "); AfficherRect(&(info.rcMonitor)); printf(" rcWork : "); AfficherRect(&(info.rcWork)); } return TRUE; } int main() { EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0); return 0; }
Voici de quoi énumérer les écrans présents sur votre système. Si vous avez par exemple deux écrans branchés. La fonction EnumDisplayMonitors va appeler N fois la fonction que vous lui passez en paramètre, avec N le nombre de moniteurs branchés. Les paramètres seront, entre autres, un identifiant moniteur (HMONITOR), et une zone rectangulaire lprcMonitor. En faisant GetMonitorInfo, vous avez accès à une structure qui vous donne davantage d'informations : le nom du moniteur, et deux rectangles : rcMonitor : la résolution du moniteur, et rcWork, la dimension de la zone de travail (qui peut être un peu plus petite, par exemple à cause de la barre de tâches) Vous saurez aussi quel moniteur est le moniteur principal. Il se peut que pour les moniteurs secondaires, les coordonnées soient négatives : c'est le cas par exemple s'il est placé (virtuellement) à gauche du principal. Quelques liens de documentation : http://msdn.microsoft.com/en-us/library/dd162610(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/dd145061(v=vs.85).aspx