You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.0 KiB
127 lines
4.0 KiB
using System;
|
|
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
namespace FullscreenEditor.Windows {
|
|
[System.Serializable]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct NativeRect {
|
|
public int left;
|
|
public int top;
|
|
public int right;
|
|
public int bottom;
|
|
|
|
public static implicit operator Rect(NativeRect other) {
|
|
return Rect.MinMaxRect(
|
|
other.left,
|
|
other.top,
|
|
other.right,
|
|
other.bottom
|
|
);
|
|
}
|
|
|
|
public static implicit operator NativeRect(Rect other) {
|
|
return new NativeRect {
|
|
left = (int)other.xMin,
|
|
top = (int)other.yMin,
|
|
right = (int)other.xMax,
|
|
bottom = (int)other.yMax
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|
internal struct MonitorInfoEx {
|
|
|
|
private const int CCHDEVICENAME = 0x20;
|
|
|
|
public int size;
|
|
public NativeRect monitor;
|
|
public NativeRect work;
|
|
public uint flags;
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
|
|
public string DeviceName;
|
|
|
|
public void Init() {
|
|
this.size = 40 + 1 * CCHDEVICENAME;
|
|
this.DeviceName = string.Empty;
|
|
}
|
|
|
|
}
|
|
|
|
[System.Serializable]
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct DevMode {
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
|
public string dmDeviceName;
|
|
public short dmSpecVersion;
|
|
public short dmDriverVersion;
|
|
public short dmSize;
|
|
public short dmDriverExtra;
|
|
public int dmFields;
|
|
public int dmPositionX;
|
|
public int dmPositionY;
|
|
public ScreenOrientation dmDisplayOrientation;
|
|
public int dmDisplayFixedOutput;
|
|
public short dmColor;
|
|
public short dmDuplex;
|
|
public short dmYResolution;
|
|
public short dmTTOption;
|
|
public short dmCollate;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
|
public string dmFormName;
|
|
public short dmLogPixels;
|
|
public int dmBitsPerPel;
|
|
public int dmPelsWidth;
|
|
public int dmPelsHeight;
|
|
public int dmDisplayFlags;
|
|
public int dmDisplayFrequency;
|
|
public int dmICMMethod;
|
|
public int dmICMIntent;
|
|
public int dmMediaType;
|
|
public int dmDitherType;
|
|
public int dmReserved1;
|
|
public int dmReserved2;
|
|
public int dmPanningWidth;
|
|
public int dmPanningHeight;
|
|
}
|
|
|
|
[Flags]
|
|
internal enum DisplayDeviceStateFlags : int {
|
|
/// <summary>The device is part of the desktop.</summary>
|
|
AttachedToDesktop = 0x1,
|
|
MultiDriver = 0x2,
|
|
/// <summary>The device is part of the desktop.</summary>
|
|
PrimaryDevice = 0x4,
|
|
/// <summary>Represents a pseudo device used to mirror application drawing for remoting or other purposes.</summary>
|
|
MirroringDriver = 0x8,
|
|
/// <summary>The device is VGA compatible.</summary>
|
|
VGACompatible = 0x10,
|
|
/// <summary>The device is removable; it cannot be the primary display.</summary>
|
|
Removable = 0x20,
|
|
/// <summary>The device has more display modes than its output devices support.</summary>
|
|
ModesPruned = 0x8000000,
|
|
Remote = 0x4000000,
|
|
Disconnect = 0x2000000
|
|
}
|
|
|
|
[System.Serializable]
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|
internal struct DisplayDevice {
|
|
[MarshalAs(UnmanagedType.U4)]
|
|
public int cb;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
|
public string DeviceName;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
public string DeviceString;
|
|
[MarshalAs(UnmanagedType.U4)]
|
|
public DisplayDeviceStateFlags StateFlags;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
public string DeviceID;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
public string DeviceKey;
|
|
}
|
|
|
|
}
|
|
|