C#實現設置電腦顯示器參數
實踐過程
效果
代碼
public partial class Form1 : Form { public Form1() { InitializeComponent(); } string MaxValue;//顯示器支持的最大刷新率 string MinValue;//顯示器支持的最小刷新率 string NowValue;//當前刷新率 bool flag = true; public const uint WM_SYSCOMMAND = 0x0112; public const uint SC_MONITORPOWER = 0xF170; [DllImport("user32")] public static extern IntPtr SendMessage(IntPtr hWnd, uint wMsg, uint wParam, int lParam); 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; public const int DM_BITSPERPEL = 262144; 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); private void Form1_Load(object sender, EventArgs e) { groupBox5.Text = "當前時間:" + DateTime.Now.ToString(); ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_VideoController"); foreach(ManagementObject myobject in searcher.Get() ) { string Vname = myobject["Name"].ToString(); if (Vname.Length >40) { string a = Vname.Substring(0,45); string b = Vname.Substring(46); lblInfo.Text = a + "\n" + b; } else { lblInfo.Text = Vname; } string colorValue = myobject["CurrentNumberOfColors"].ToString(); if (colorValue == "65536") { comboBox1.SelectedIndex = 0; } else { comboBox1.SelectedIndex = 1; } MaxValue=myobject["MaxRefreshRate"].ToString(); if (Convert.ToInt32(MaxValue) > 85) MaxValue = "85"; MinValue = myobject["MinRefreshRate"].ToString(); NowValue=myobject["CurrentRefreshRate"].ToString(); AddHZ(); GetDis(); ChangeDis(1); } } int dWidth = 0; int dHeight = 0; private void GetDis()//獲取分辨率 { Size s = SystemInformation.PrimaryMonitorSize; dWidth = s.Width; dHeight = s.Height; lblDisInfo.Text = dWidth.ToString() + " × " + dHeight.ToString() + " 像素"; } private void ChangeDis(int i)//變換分辨率 { int dValue; dValue = trackBar1.Value; if (i == 0) { switch (dValue) { case 0: dWidth = 800; dHeight = 600; break; case 1: dWidth = 1024; dHeight = 768; break; case 2: dWidth = 1152; dHeight = 864; break; case 3: dWidth = 1280; dHeight = 600; break; case 4: dWidth = 1280; dHeight = 720; break; case 5: dWidth = 1280; dHeight = 768; break; case 6: dWidth = 1280; dHeight = 760; break; case 7: dWidth = 1280; dHeight = 1024; break; case 8: dWidth = 1400; dHeight = 1050; break; case 9: dWidth = 1600; dHeight = 900; break; case 10: dWidth = 1600; dHeight = 1200; break; } lblDisInfo.Text = dWidth.ToString() + " × " + dHeight.ToString() + " 像素"; } else { int dSum=dWidth+dHeight; switch (dSum) { case 1400: trackBar1.Value = 0; break; case 1792: trackBar1.Value = 1; break; case 2016: trackBar1.Value = 2; break; case 1880: trackBar1.Value = 3; break; case 2000: trackBar1.Value = 4; break; case 2048: trackBar1.Value = 5; break; case 2240: trackBar1.Value = 6; break; case 2304: trackBar1.Value = 7; break; case 2450: trackBar1.Value = 8; break; case 2500: trackBar1.Value = 9; break; case 2800: trackBar1.Value = 10; break; } } } private void AddHZ() { int[] hz = new int[] { 60, 70, 75, 85, 100, 120 }; comboBox2.Items.Clear(); if (checkBox1.Checked) { for (int i = 0; i < hz.Length; i++) { if (hz[i] <= Convert.ToInt32(MaxValue)) { comboBox2.Items.Add(hz[i].ToString() + "赫茲"); } } comboBox2.Text = NowValue + "赫茲"; } else { for (int j = 0; j < hz.Length; j++) { comboBox2.Items.Add(hz[j].ToString() + "赫茲"); } comboBox2.Text = NowValue + "赫茲"; } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { AddHZ(); } private void button2_Click(object sender, EventArgs e) { Application.Exit(); } private void trackBar1_Scroll(object sender, EventArgs e) { ChangeDis(0); } private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked) { groupBox1.Enabled = true; groupBox2.Enabled = true; groupBox3.Enabled = true; groupBox4.Enabled = true; } else { groupBox1.Enabled = false; groupBox2.Enabled = false; groupBox3.Enabled = false; groupBox4.Enabled = false; } } private void radioButton2_CheckedChanged(object sender, EventArgs e) { if (radioButton2.Checked) { groupBox5.Enabled = true; } else { groupBox5.Enabled = false; } } private void button1_Click(object sender, EventArgs e) { if (radioButton1.Checked)//設置分辨率、顏色質量、刷新率 { long RetVal = 0; DEVMODE dm = new DEVMODE(); dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE)); dm.dmPelsWidth = dWidth;//寬 dm.dmPelsHeight = dHeight;//高 int f =Convert.ToInt32(comboBox2.Text.Trim().Remove(comboBox2.Text.Trim().Length-2)); dm.dmDisplayFrequency = f;//刷新率 if (comboBox1.SelectedIndex == 0) dm.dmBitsPerPel = 16; else dm.dmBitsPerPel = 32; dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY | DEVMODE.DM_BITSPERPEL; RetVal = ChangeDisplaySettings(ref dm, 0); } if (radioButton2.Checked)//關閉顯示器 { timer1.Start(); this.Close(); } } private void timer1_Tick(object sender, EventArgs e) { if (dateTimePicker1.Text == DateTime.Now.ToLongTimeString()) { SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2); timer1.Stop(); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); if (flag) { e.Cancel = true; } } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { flag = false; Application.Exit(); } private void 顯示ToolStripMenuItem_Click(object sender, EventArgs e) { this.Show(); } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); } private void timer2_Tick(object sender, EventArgs e) { groupBox5.Text = "當前時間:" + DateTime.Now.ToString(); } }
partial class Form1 { /// <summary> /// 必需的設計器變量。 /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的資源。 /// </summary> /// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗體設計器生成的代碼 /// <summary> /// 設計器支持所需的方法 - 不要 /// 使用代碼編輯器修改此方法的內容。 /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.lblDisInfo = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.trackBar1 = new System.Windows.Forms.TrackBar(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.lblInfo = new System.Windows.Forms.Label(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.comboBox1 = new System.Windows.Forms.ComboBox(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.checkBox1 = new System.Windows.Forms.CheckBox(); this.comboBox2 = new System.Windows.Forms.ComboBox(); this.groupBox5 = new System.Windows.Forms.GroupBox(); this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); this.label4 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.radioButton1 = new System.Windows.Forms.RadioButton(); this.radioButton2 = new System.Windows.Forms.RadioButton(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.顯示ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.timer2 = new System.Windows.Forms.Timer(this.components); this.groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox5.SuspendLayout(); this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // // groupBox1 // this.groupBox1.Controls.Add(this.lblDisInfo); this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.label1); this.groupBox1.Controls.Add(this.trackBar1); this.groupBox1.Location = new System.Drawing.Point(11, 96); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(161, 81); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = "屏幕分辨率"; // // lblDisInfo // this.lblDisInfo.AutoSize = true; this.lblDisInfo.Location = new System.Drawing.Point(36, 57); this.lblDisInfo.Name = "lblDisInfo"; this.lblDisInfo.Size = new System.Drawing.Size(41, 12); this.lblDisInfo.TabIndex = 3; this.lblDisInfo.Text = "label3"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(134, 29); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(17, 12); this.label2.TabIndex = 2; this.label2.Text = "多"; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(15, 29); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(17, 12); this.label1.TabIndex = 1; this.label1.Text = "少"; // // trackBar1 // this.trackBar1.AutoSize = false; this.trackBar1.Location = new System.Drawing.Point(33, 26); this.trackBar1.Name = "trackBar1"; this.trackBar1.Size = new System.Drawing.Size(95, 23); this.trackBar1.TabIndex = 0; this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll); // // groupBox2 // this.groupBox2.Controls.Add(this.lblInfo); this.groupBox2.Location = new System.Drawing.Point(12, 36); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(328, 53); this.groupBox2.TabIndex = 2; this.groupBox2.TabStop = false; this.groupBox2.Text = "顯示設備"; // // lblInfo // this.lblInfo.AutoSize = true; this.lblInfo.Location = new System.Drawing.Point(10, 20); this.lblInfo.Name = "lblInfo"; this.lblInfo.Size = new System.Drawing.Size(41, 12); this.lblInfo.TabIndex = 0; this.lblInfo.Text = "label3"; // // groupBox3 // this.groupBox3.Controls.Add(this.comboBox1); this.groupBox3.Location = new System.Drawing.Point(178, 96); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(161, 81); this.groupBox3.TabIndex = 3; this.groupBox3.TabStop = false; this.groupBox3.Text = "顏色質量"; // // comboBox1 // this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBox1.FormattingEnabled = true; this.comboBox1.Items.AddRange(new object[] { "中(16位)", "最高(32位)"}); this.comboBox1.Location = new System.Drawing.Point(7, 31); this.comboBox1.Name = "comboBox1"; this.comboBox1.Size = new System.Drawing.Size(148, 20); this.comboBox1.TabIndex = 0; // // groupBox4 // this.groupBox4.Controls.Add(this.checkBox1); this.groupBox4.Controls.Add(this.comboBox2); this.groupBox4.Location = new System.Drawing.Point(12, 184); this.groupBox4.Name = "groupBox4"; this.groupBox4.Size = new System.Drawing.Size(327, 85); this.groupBox4.TabIndex = 4; this.groupBox4.TabStop = false; this.groupBox4.Text = "設置刷新頻率"; // // checkBox1 // this.checkBox1.AutoSize = true; this.checkBox1.Checked = true; this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBox1.Location = new System.Drawing.Point(7, 56); this.checkBox1.Name = "checkBox1"; this.checkBox1.Size = new System.Drawing.Size(180, 16); this.checkBox1.TabIndex = 1; this.checkBox1.Text = "隱藏該顯示器無法顯示的模式"; this.checkBox1.UseVisualStyleBackColor = true; this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); // // comboBox2 // this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBox2.FormattingEnabled = true; this.comboBox2.Items.AddRange(new object[] { "60赫茲", "70赫茲", "75赫茲", "85赫茲", "100赫茲", "120赫茲"}); this.comboBox2.Location = new System.Drawing.Point(6, 20); this.comboBox2.Name = "comboBox2"; this.comboBox2.Size = new System.Drawing.Size(315, 20); this.comboBox2.TabIndex = 0; // // groupBox5 // this.groupBox5.Controls.Add(this.dateTimePicker1); this.groupBox5.Controls.Add(this.label4); this.groupBox5.Enabled = false; this.groupBox5.Location = new System.Drawing.Point(12, 296); this.groupBox5.Name = "groupBox5"; this.groupBox5.Size = new System.Drawing.Size(328, 65); this.groupBox5.TabIndex = 5; this.groupBox5.TabStop = false; // // dateTimePicker1 // this.dateTimePicker1.Checked = false; this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Time; this.dateTimePicker1.Location = new System.Drawing.Point(94, 24); this.dateTimePicker1.Name = "dateTimePicker1"; this.dateTimePicker1.ShowCheckBox = true; this.dateTimePicker1.ShowUpDown = true; this.dateTimePicker1.Size = new System.Drawing.Size(118, 21); this.dateTimePicker1.TabIndex = 1; // // label4 // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(11, 28); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(77, 12); this.label4.TabIndex = 0; this.label4.Text = "關閉顯示器:"; // // button1 // this.button1.Location = new System.Drawing.Point(84, 372); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 6; this.button1.Text = "確定"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(177, 372); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(75, 23); this.button2.TabIndex = 7; this.button2.Text = "取消"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // radioButton1 // this.radioButton1.AutoSize = true; this.radioButton1.Checked = true; this.radioButton1.Location = new System.Drawing.Point(11, 12); this.radioButton1.Name = "radioButton1"; this.radioButton1.Size = new System.Drawing.Size(71, 16); this.radioButton1.TabIndex = 8; this.radioButton1.TabStop = true; this.radioButton1.Text = "基本設置"; this.radioButton1.UseVisualStyleBackColor = true; this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged); // // radioButton2 // this.radioButton2.AutoSize = true; this.radioButton2.Location = new System.Drawing.Point(11, 278); this.radioButton2.Name = "radioButton2"; this.radioButton2.Size = new System.Drawing.Size(71, 16); this.radioButton2.TabIndex = 9; this.radioButton2.Text = "電源設置"; this.radioButton2.UseVisualStyleBackColor = true; this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged); // // timer1 // this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // notifyIcon1 // this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); this.notifyIcon1.Text = "顯示器控制"; this.notifyIcon1.Visible = true; this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick); // // contextMenuStrip1 // this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.顯示ToolStripMenuItem, this.退出ToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Size = new System.Drawing.Size(95, 48); // // 顯示ToolStripMenuItem // this.顯示ToolStripMenuItem.Name = "顯示ToolStripMenuItem"; this.顯示ToolStripMenuItem.Size = new System.Drawing.Size(94, 22); this.顯示ToolStripMenuItem.Text = "顯示"; this.顯示ToolStripMenuItem.Click += new System.EventHandler(this.顯示ToolStripMenuItem_Click); // // 退出ToolStripMenuItem // this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem"; this.退出ToolStripMenuItem.Size = new System.Drawing.Size(94, 22); this.退出ToolStripMenuItem.Text = "退出"; this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click); // // timer2 // this.timer2.Enabled = true; this.timer2.Interval = 1000; this.timer2.Tick += new System.EventHandler(this.timer2_Tick); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(351, 403); this.Controls.Add(this.radioButton2); this.Controls.Add(this.radioButton1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox4); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "顯示器控制"; this.Load += new System.EventHandler(this.Form1_Load); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox4.ResumeLayout(false); this.groupBox4.PerformLayout(); this.groupBox5.ResumeLayout(false); this.groupBox5.PerformLayout(); this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.TrackBar trackBar1; private System.Windows.Forms.Label lblDisInfo; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.ComboBox comboBox1; private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.ComboBox comboBox2; private System.Windows.Forms.CheckBox checkBox1; private System.Windows.Forms.GroupBox groupBox5; private System.Windows.Forms.Label label4; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label lblInfo; private System.Windows.Forms.RadioButton radioButton1; private System.Windows.Forms.RadioButton radioButton2; private System.Windows.Forms.DateTimePicker dateTimePicker1; private System.Windows.Forms.Timer timer1; private System.Windows.Forms.NotifyIcon notifyIcon1; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; private System.Windows.Forms.ToolStripMenuItem 顯示ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem; private System.Windows.Forms.Timer timer2; }
到此這篇關於C#實現設置電腦顯示器參數的文章就介紹到這瞭,更多相關C#設置電腦顯示器參數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!