C# winForm 切換螢幕小工具
阿新 • • 發佈:2022-03-11
IDE:VS2022
.NET 5.0
專案檔案:
連結:https://pan.baidu.com/s/1jBeXLwWPBvxWk5mrrLLYDw?pwd=9966
提取碼:9966
主要程式碼來源:
https://www.cnblogs.com/zzr-stdio/p/12093159.html
使用場景:方便那些不會使用 win+p 的老年人使用
C# 程式碼:
Form1.cs
using System; using System.Diagnostics; using System.Windows.Forms; namespace switchMonitor { public partial class Form1 : Form { public Form1() { InitializeComponent(); // 顯示當前接入螢幕數量 Text = "當前切入顯示器數:" + Screen.AllScreens.Length.ToString(); //label2.Text = Screen.AllScreens.Length.ToString(); } // 顯示器切換引數 public enum DisplaySwitchEnum { Default, Internal, // 僅第一螢幕 Clone, // 複製螢幕 Extend, // 擴充套件螢幕 External // 僅第二螢幕 } public static void DisplaySwitch(DisplaySwitchEnum displaySwitch) { Process process = new(); #pragma warning disable CS8600 // 將 null 字面量或可能為 null 的值轉換為非 null 型別。 string str = Environment.GetEnvironmentVariable("windir");//獲取系統目錄 #pragma warning restore CS8600 // 將 null 字面量或可能為 null 的值轉換為非 null 型別。 string dir = "System32"; if (!Environment.Is64BitProcess) { dir = "SysNative";//非64位程序的使用這個目錄 } process.StartInfo.WorkingDirectory = System.IO.Path.Combine(str, dir); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardInput = true; process.StartInfo.CreateNoWindow = true; process.Start(); string cmd = string.Empty; switch (displaySwitch) { case DisplaySwitchEnum.Clone: cmd = "displayswitch.exe /clone"; // 複製螢幕 break; case DisplaySwitchEnum.Extend: cmd = "displayswitch.exe /extend"; // 擴充套件螢幕 break; case DisplaySwitchEnum.External: cmd = "displayswitch.exe /external"; // 僅第二螢幕 break; case DisplaySwitchEnum.Internal: cmd = "displayswitch.exe /internal"; // 僅第一螢幕 break; } process.StandardInput.WriteLine(cmd); process.Close(); } // 按鈕 僅第一螢幕 private void Button1_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Internal); } // 按鈕 僅第二螢幕 private void Button2_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.External); } // 按鈕 複製螢幕 private void Button3_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Clone); } // 按鈕 擴充套件螢幕 private void Button4_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Extend); } // 托盤圖示 private void NotifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { if (WindowState == FormWindowState.Minimized) { // 還原窗體顯示 WindowState = FormWindowState.Normal; // 啟用窗體並給予它焦點 Activate(); // 工作列區顯示圖示 ShowInTaskbar = true; // 托盤區圖示隱藏 NotifyIcon1.Visible = false; } } // 窗體尺寸改變: 判斷是否最小化,然後顯示托盤 private void Form1_StyleChanged(object sender, EventArgs e) { // 判斷是否選擇的是最小化按鈕 if (WindowState == FormWindowState.Minimized) { // 隱藏工作列區圖示 //ShowInTaskbar = false; // 圖示顯示在托盤區 NotifyIcon1.Visible = true; } } // 窗體關閉時: 退出 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // 關閉所有的執行緒 //Dispose(); //Close(); WindowState = FormWindowState.Minimized; e.Cancel = true; // 隱藏工作列區圖示 ShowInTaskbar = false; // 圖示顯示在托盤區 NotifyIcon1.Visible = true; } // 托盤選單 private void 僅第一螢幕ToolStripMenuItem_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Internal); } private void 僅第二螢幕ToolStripMenuItem_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.External); } private void 複製螢幕ToolStripMenuItem_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Clone); } private void 擴充套件螢幕ToolStripMenuItem_Click(object sender, EventArgs e) { DisplaySwitch(DisplaySwitchEnum.Extend); } private void 顯示程式ToolStripMenuItem_Click(object sender, EventArgs e) { WindowState = FormWindowState.Normal; } private void 退出程式ToolStripMenuItem_Click(object sender, EventArgs e) { // 關閉所有的執行緒 Dispose(); Close(); } } }