Winform修改屏幕分辨率以及获取当前系统支持的分辨率

mac2022-06-30  25

/// <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

最新回复(0)