• 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 的老年人使用

    image

    image

    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();
            }
        }
    }
    
    
  • 相关阅读:
    学习 Web 开发技术的16个最佳教程网站和博客
    将会改变未来IT世界的十种编程语言
    用来理解 Java 编程语言的 8 个图表
    花样Android ProgressBar
    Android控件TextProgressBar进度条上显文字
    ViewFlipper 在同一背景下 页面左右滑动
    Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
    android用户界面之GridView教程实例汇总
    禁止ScrollView在子控件的布局改变时自动滚动的的方法
    ListView中使用自定义Adapter及时更xin
  • 原文地址:https://www.cnblogs.com/nb08611033/p/15993616.html
Copyright © 2020-2023  润新知