1. 程式人生 > 其它 >C# winForm 切換螢幕小工具

C# winForm 切換螢幕小工具

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();
        }
    }
}