public static List <DisplayAdapterMonitorInfo> GetAllMonitorsForDisplayAdapter(String displayAdapterName) { var result = new List <DisplayAdapterMonitorInfo>(); var displayAdapterNameAsCharArray = ConvertStringToNullTerminatedCharArray(displayAdapterName); // get the monitors associated with this display adapter UInt32 iMonitor = 0; // var success = true; while (success == true) { var cDisplayDevice = new WindowsApi.DISPLAY_DEVICEW(); cDisplayDevice.Init(); success = WindowsApi.EnumDisplayDevices_Monitor(displayAdapterNameAsCharArray, iMonitor, ref cDisplayDevice, 0); if (success == false) { break; } var monitorDeviceNameAsString = Display.ConvertCharArrayToString(cDisplayDevice.DeviceName); var monitorDeviceStringAsString = Display.ConvertCharArrayToString(cDisplayDevice.DeviceString); var monitorStateFlags = (UInt32)cDisplayDevice.StateFlags; Boolean isAttached = false; if ((monitorStateFlags & (UInt32)WindowsApi.ChildDisplayDeviceStateFlags.DISPLAY_DEVICE_ATTACHED) != 0) { isAttached = true; } // if the monitor is not attached, do not include it in the enumeration; we may modify this logic in the future if/as desired if (isAttached == false) { iMonitor += 1; continue; } Boolean isActive = false; if ((monitorStateFlags & (UInt32)WindowsApi.ChildDisplayDeviceStateFlags.DISPLAY_DEVICE_ACTIVE) != 0) { isActive = true; } var monitorInfo = new DisplayAdapterMonitorInfo(monitorDeviceNameAsString, monitorDeviceStringAsString, isActive); result.Add(monitorInfo); iMonitor += 1; } return(result); }
public static List <DisplayAdapterInfo> GetAllDisplayAdapters() { var result = new List <DisplayAdapterInfo>(); // get a list of all display adapters UInt32 iDisplayAdapter = 0; // var success = true; while (success == true) { var cDisplayDevice = new WindowsApi.DISPLAY_DEVICEW(); cDisplayDevice.Init(); success = WindowsApi.EnumDisplayDevices_DisplayAdapter(IntPtr.Zero, iDisplayAdapter, ref cDisplayDevice, 0); if (success == false) { break; } // verify that the device is attached to the desktop if ((UInt32)(cDisplayDevice.StateFlags & WindowsApi.DisplayDeviceStateFlags.DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) == 0) { iDisplayAdapter += 1; continue; } // verify that the device is not a mirroring psuedodevice if ((UInt32)(cDisplayDevice.StateFlags & WindowsApi.DisplayDeviceStateFlags.DISPLAY_DEVICE_MIRRORING_DRIVER) != 0) { iDisplayAdapter += 1; continue; } var deviceNameAsCharArray = cDisplayDevice.DeviceName; var deviceNameAsString = ConvertCharArrayToString(deviceNameAsCharArray); var isPrimaryDisplayAdapter = false; if ((UInt32)(cDisplayDevice.StateFlags & WindowsApi.DisplayDeviceStateFlags.DISPLAY_DEVICE_PRIMARY_DEVICE) != 0) { isPrimaryDisplayAdapter = true; } var displayAdapterInfo = new DisplayAdapterInfo(deviceNameAsString, isPrimaryDisplayAdapter); result.Add(displayAdapterInfo); iDisplayAdapter += 1; } return(result); }