winapi — подсчет мониторов из сервиса с переполнением стека

Я пытаюсь подсчитать количество мониторов (то есть экранов), подключенных к консоли из приложения-службы. Я делаю следующее:

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.

Итак, как вы считаете мониторы из службы?

1

Решение

Во-первых, почему консоль является особенной для службы по сравнению с количеством дисплеев, прикрепленных к удаленному сеансу? Тогда как насчет зеркального отображения / расширенного рабочего стола / eyefinity?

Теперь узнайте о Оконные станции и рабочие столы. Тогда узнайте о разрушительных атаках.

Наконец, если вам действительно нужно перечисление аппаратного обеспечения, для этого есть API. SetupDiGetClassDevs на экране настройки монитора отобразится количество физических экранов, доступных для видеокарты.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]