using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace CPResolution
{
public enum DMDO
{
DEFAULT = 0,
D90 = 1,
D180 = 2,
D270 = 3
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct DEVMODE
{
public const int DM_DISPLAYFREQUENCY = 0x400000;
public const int DM_PELSWIDTH = 0x80000;
public const int DM_PELSHEIGHT = 0x100000;
private const int CCHDEVICENAME = 32;
private const int CCHFORMNAME = 32;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHDEVICENAME)]
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 DMDO dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHFORMNAME)]
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;
}
class Program
{
[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, int iModeNum, ref DEVMODE lpDevMode);
static List<DEVMODE> ResolutionMode = new List<DEVMODE>();
static void ChangeScreenResolution(int PelsWidth, int PelsHeight, int Frequency)
{
//Form1 t = new Form1();
long RetVal = 0;
DEVMODE dm = new DEVMODE();
dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
dm.dmPelsWidth = PelsWidth;
dm.dmPelsHeight = PelsHeight;
dm.dmDisplayFrequency = Frequency;
dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
RetVal = ChangeDisplaySettings(ref dm, 0);
if (RetVal == 0)
{
Console.WriteLine("width:" + PelsWidth + ",Height:" + PelsHeight + ",Frequency:" + Frequency);
}
}
private static List<DEVMODE> GetFullDisplaySetting()
{
DEVMODE lpDevMode = new DEVMODE();
lpDevMode.dmDriverExtra = 0;
lpDevMode.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
lpDevMode.dmDriverExtra = 0;
try
{
int index = 0;
while (EnumDisplaySettings(null, index, ref lpDevMode))
{
if (lpDevMode.dmPelsHeight >= 600 && lpDevMode.dmPelsWidth >= 800)
{
ResolutionMode.Add(lpDevMode);
}
index++;
}
return ResolutionMode;
}
catch
{
return null;
}
}
static void Main(string[] args)
{
List<DEVMODE> mode = GetFullDisplaySetting();
foreach(DEVMODE Reso in mode)
{
ChangeScreenResolution(Reso.dmPelsWidth,Reso.dmPelsHeight,Reso.dmDisplayFrequency);
Thread.Sleep(5000);
}
}
}
}
C#遍历设置计算机分辨率
最新推荐文章于 2021-11-11 16:51:33 发布