Я пытаюсь подсчитать количество мониторов (то есть экранов), подключенных к консоли из приложения-службы. Я делаю следующее:
int CountMonitors()
{
int nCnt = 0;
if(!EnumDisplayMonitors(NULL, NULL, _countMonitorEnumProc, (LPARAM)&nCnt))
{
//Error
nCnt = -1;
}
return nCnt;
}
BOOL _countMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
int* pCnt = (int*)dwData;
(*pCnt)++;
return TRUE;
}
но счетчик всегда равен 1 (когда я тестирую его на Windows 7 с двумя мониторами), я делаю это (что не совсем то, что мне нужно из-за его ограничение):
int nCnt = GetSystemMetrics(SM_CMONITORS);
и результат также 1.
Итак, как вы считаете мониторы из службы?
Во-первых, почему консоль является особенной для службы по сравнению с количеством дисплеев, прикрепленных к удаленному сеансу? Тогда как насчет зеркального отображения / расширенного рабочего стола / eyefinity?
Теперь узнайте о Оконные станции и рабочие столы. Тогда узнайте о разрушительных атаках.
Наконец, если вам действительно нужно перечисление аппаратного обеспечения, для этого есть API. SetupDiGetClassDevs
на экране настройки монитора отобразится количество физических экранов, доступных для видеокарты.
Других решений пока нет …