public IEnumerable<DisplayHelper> Get() { var device = new DisplayDevice(); device.cb = Marshal.SizeOf(device); var list = new List<DisplayHelper>(); for (uint id = 0; NativeMethods.EnumDisplayDevices(null, id, ref device, 0); id++) { device.cb = Marshal.SizeOf(device); NativeMethods.EnumDisplayDevices(device.DeviceName, 0, ref device, 0); device.cb = Marshal.SizeOf(device); device.cb = Marshal.SizeOf(device); if (device.DeviceName.Trim().Length > 0) { var helper = new DisplayHelper { Id = id, Name = device.DeviceString }; foreach (var screen in Screen.AllScreens) { if (device.DeviceName.Contains(screen.DeviceName)) { var rectangle = screen.Bounds; helper.PositionX = rectangle.X; helper.PositionY = rectangle.Y; helper.Height = rectangle.Height; helper.Width = rectangle.Width; } } list.Add(helper); } } return list; }
public void For(int rotation, uint deviceId) { //uint deviceId = 1; // zero origin (i.e. 1 means DISPLAY2) var displayDevice = new DisplayDevice(); var devMode = new Devmode(); displayDevice.cb = Marshal.SizeOf(displayDevice); NativeMethods.EnumDisplayDevices(null, deviceId, ref displayDevice, 0); if (0 != NativeMethods.EnumDisplaySettings( displayDevice.DeviceName, NativeMethods.EnumCurrentSettings, ref devMode)) { int temp = devMode.dmPelsHeight; devMode.dmPelsHeight = devMode.dmPelsWidth; devMode.dmPelsWidth = temp; } devMode.dmDisplayOrientation = rotation; DisplayChange iRet = NativeMethods.ChangeDisplaySettingsEx( displayDevice.DeviceName, ref devMode, IntPtr.Zero, DisplaySettingsFlags.CdsUpdateregistry, IntPtr.Zero); }
internal static extern bool EnumDisplayDevices( string lpDevice, uint iDevNum, ref DisplayDevice lpDisplayDevice, uint dwFlags);