using System.Runtime.InteropServices; //改變解析度引用 [DllImport("user32.dll")] private static extern bool SetWindowPos(int hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] public static extern int GetSystemMetrics(int screensize); public const int SM_CXSCREEN = 0; public const int SM_CYSCREEN = 1; private static IntPtr HWND_TOP = IntPtr.Zero; private const int SWP_SHOWWINDOW = 64; int w; int h; [DllImport("user32.dll")] private static extern int FindWindow(string className, string windowText); [DllImport("user32.dll")] private static extern int ShowWindow(int hwnd, int command); [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; } [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags); public enum DMDO { DEFAULT = 0, D90 = 1, D180 = 2, D270 = 3 } private void change(int intWidth, int intHeight, int intFrequency) { long RetVal = 0; DEVMODE dm = new DEVMODE(); dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE)); dm.dmPelsWidth = intWidth; dm.dmPelsHeight = intHeight; dm.dmDisplayFrequency = intFrequency; dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY; RetVal = ChangeDisplaySettings(ref dm, 0); Width = intWidth; Height = intHeight; w = intWidth; h = intHeight; } //程式載入 private void Form1_Load(object sender, EventArgs e) { //改變解析度,螢幕更新頻率 change(1024, 768, 75); this.WindowState = FormWindowState.Normal; SetWindowPos((int)this.Handle, HWND_TOP, 0, 0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { //程式關掉改回來原解析度 change(w, h, 75); this.ControlBox = true; this.WindowState = FormWindowState.Maximized; this.FormBorderStyle = FormBorderStyle.FixedSingle; }
2011年7月3日 星期日
[C#] 改變解析度
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言