1

我正在尝试计算从服务应用程序连接到控制台的监视器(即屏幕)的数量。我执行以下操作:

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。

那么如何计算服务中的监视器呢?

4

1 回答 1

1

首先,为什么控制台对服务来说是特殊的,而不是远程会话上附加的显示器数量?那么,显示镜像/扩展桌面/eyefinity呢?

现在,了解Window Stations 和 Desktops。然后了解粉碎攻击。

最后,如果您真正追求的是硬件枚举,那么有相应的 API。 SetupDiGetClassDevs在显示监视器设置类上将告诉您视频卡暴露了多少物理屏幕。

于 2012-12-21T22:06:40.283 回答