12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #ifndef CMULTIMONITORENUMERATOR_H
- #define CMULTIMONITORENUMERATOR_H
- #include <windows.h>
- #include <vector>
- class CMultiMonitorEnumerator
- {
- public:
- CMultiMonitorEnumerator()
- {
- m_iMontorNumber = 0;
- EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)this);
- }
- int getMontorNumber()
- {
- return m_iMontorNumber;
- }
- protected:
-
- static BOOL CALLBACK MonitorEnumProc(
- HMONITOR hMonitor,
- HDC hdcMonitor,
- LPRECT lprcMonitor,
- LPARAM dwData
- )
- {
- CMultiMonitorEnumerator *pThis = (CMultiMonitorEnumerator *)dwData;
-
- MONITORINFOEX infoEx;
- memset(&infoEx, 0, sizeof(infoEx));
- infoEx.cbSize = sizeof(infoEx);
- if(GetMonitorInfo(hMonitor, &infoEx))
- {
- DISPLAYCONFIG_TOPOLOGY_ID currentTopologyId;
- UINT32 requiredPaths, requiredModes;
- GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &requiredPaths, &requiredModes);
- std::vector<DISPLAYCONFIG_PATH_INFO> paths(requiredPaths);
- std::vector<DISPLAYCONFIG_MODE_INFO> modes(requiredModes);
- QueryDisplayConfig(QDC_DATABASE_CURRENT, &requiredPaths, paths.data(), &requiredModes, modes.data(), ¤tTopologyId);
- if(currentTopologyId == DISPLAYCONFIG_TOPOLOGY_CLONE)
- {
- pThis->m_iMontorNumber += paths.size();
- }
- else
- {
- pThis->m_iMontorNumber++;
- }
- return true;
- }
- return false;
- }
- private:
- int m_iMontorNumber;
- };
- #endif
|