/// <summary>
/// 调整屏幕分辨率
/// </summary>
public class SetDisplay
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;
public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern bool EnumDisplaySettings(string lpszDeviceName, Int32 iModeNum, ref DEVMODE lpDevMode);
/// <summary>
/// 设置屏幕分辨率
/// </summary>
/// <param name="Width">宽度</param>
/// <param name="Height">高度</param>
public static void ChangeRes(int Width,int Height)
{
DEVMODE DevM = new DEVMODE();
DevM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
bool mybool;
mybool = EnumDisplaySettings(null, 0, ref DevM);
DevM.dmPelsWidth =Width;//宽
DevM.dmPelsHeight=Height;//高
DevM.dmDisplayFrequency = 60;//刷新频率
DevM.dmBitsPerPel = 32;//颜色象素
long result = ChangeDisplaySettings(ref DevM, 0);
}
/// <summary>
/// 当前系统支持的分辨率列表
/// </summary>
/// <returns></returns>
private static List<Size> CurenScrennSettingList()
{
List<Size> CurenSetList = new List<Size>();
int i = -1;
string str=string.Empty;
List<string> ls = new List<string>();
DEVMODE DevM = new DEVMODE();
bool mybool;
mybool = EnumDisplaySettings(null,i, ref DevM);
while (mybool)
{
i = i + 1;
Size cuSize = new Size(DevM.dmPelsWidth, DevM.dmPelsHeight);
CurenSetList.Add(cuSize);
mybool = EnumDisplaySettings(null, i, ref DevM);
}
return CurenSetList;
}
/// <summary>
/// 系统支持的分辨率集合(过滤后)
/// </summary>
/// 暂定四种分辨率,有则显示,没有则不显示
/// 1024*768,800*600,1280*720,1920*1080
/// <returns>支持的分辨率集合</returns>
public static List<Size> FilterSettingList()
{
List<Size> CusList = new List<Size>();
CusList.Add(new Size(800, 600));
CusList.Add(new Size(1024, 768));
CusList.Add(new Size(1280, 720));
CusList.Add(new Size(1920, 1080));
List<Size> FilterSetList = new List<Size>();
List<Size> CurenList = CurenScrennSettingList();
if (CurenList.Count > 0)
{
for (int i = 0; i < CurenList.Count; i++) {
if (CusList.IndexOf(CurenList[i]) != -1) {
if (FilterSetList.IndexOf(CurenList[i]) == -1)
{
FilterSetList.Add(CurenList[i]);
}
}
}
}
return FilterSetList;
}
}
转载于:https://www.cnblogs.com/hzwenling/archive/2013/05/10/3070924.html