C#窗体程序入门,实现3秒倒计时关闭显示器,实现系统托盘,右键菜单。

3秒倒计时关闭显示器

本文适合新入门C#的同学了解和学习:
软件功能简单,实用。
适合有的时候电脑需要开机又想立即关闭显示器,比如下楼吃饭,比如睡觉前,还比如游戏副本挂机时候。

源代码在最后

先看界面:
效果图
这是运行界面。
托盘提示
这是托盘提示:
托盘右键菜单
这是托盘右键菜单。
我们可以看到主要用了以下元素:
- 1.计时器,timer
- 2.托盘,notifyIcon
- 3.菜单,contextMenuStrip
- 4.关闭显示器的具体实现

隐藏边框透明效果

3
2
1


实现


  • 1.计时器,和关闭显示器实现

布局部分就不讲解了
首先我们拖入一个timer,把enable属性设置为true,interval属性设置为1000(1秒),双击timer自动产生tick事件
 int i = 3;//倒计时
 private void timer1_Tick(object sender, EventArgs e)
        {
            i--;
            //Console.WriteLine("" + i);//控制台输出
            labelCountDown.Text = "" + i;
            if (i == 0)
            {
                timer1.Stop();
                WindowState = FormWindowState.Minimized;
                notifyIcon1.Visible = true;//显示托盘
                this.Hide();               //隐藏窗体
                //开启一个线程,关闭显示器,如果在主线程关闭显示器,再激活显示器会出问题(自己试验)
                Thread fThread = new Thread(new ThreadStart(closeSc));
                fThread.Start();
            }
        }
  //关闭显示器
        private void closeSc(){
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);//关闭显示器
        }


  • 2.托盘,和菜单

首先我们拖入一个notifyIcon,再拖入一个contextMenuStrip,把notifyIcon的ContextMenuStrip属性设置刚刚拖入的这个contextMenuStrip,Text属性设置一个鼠标指在上面显示的值,contextMenuStrip在界面添加自己需要的菜单名称,双击菜单名字就会自动产生对应的回调监听事件
   //退出程序
        private void exit()
        {
            this.Dispose();//释放资源
            this.Close();//关闭当前窗口
            Application.Exit();//强制所有消息中止,退出所有的窗体
            Application.ExitThread();//强制中止调用线程上的所有消息
            System.Environment.Exit(0);//退出程序
        }

        //右键菜单关闭显示器
        private void closeSC_Click(object sender, EventArgs e) {
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
            notifyIcon1.Visible = false;//隐藏托盘
            i = 3;
            labelCountDown.Text = "" + i;//刷新显示为3
            timer1.Start();//计时器启动
        }

        //关闭显示器
        private void closeSc(){
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);//关闭显示器
        }
        //右键菜单退出
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            exit();
        }


  • 3.拦截窗体关闭按钮

这个是为了点击关闭时候最小化到托盘
   //窗体关闭按钮
        private void Form_main_FormClosing(object sender, FormClosingEventArgs e)
        {
            //窗体关闭原因为单击"关闭"按钮或Alt+F4  
             if (e.CloseReason == CloseReason.UserClosing)
             {
                WindowState = FormWindowState.Minimized;
                notifyIcon1.Visible = true;//显示托盘
                e.Cancel = true;           //取消关闭操作 表现为不关闭窗体  
                this.Hide();               //隐藏窗体  
            }
        }

完整代码

using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;

namespace 关闭显示器
{
    public partial class Form_main : Form
    {
        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
        private const uint WM_SYSCOMMAND = 0x112;                    //系统消息
        private const int SC_MONITORPOWER = 0xF170;                  //关闭显示器的系统命令
        private const int MonitorPowerOff = 2;                       //2为PowerOff, 1为省电状态,-1为开机
        private const int SC_SCREENSAVE = 0xf140;   // 启动屏幕保护消息
        private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);//广播消息,所有顶级窗体都会接收
        int i = 3;//倒计时

      //构造函数
        public Form_main()
        {
            //屏幕中央启动
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            i--;
            //Console.WriteLine("" + i);//控制台输出
            labelCountDown.Text = "" + i;
            if (i == 0)
            {
                timer1.Stop();
                WindowState = FormWindowState.Minimized;
                notifyIcon1.Visible = true;//显示托盘
                this.Hide();               //隐藏窗体  
                Thread fThread = new Thread(new ThreadStart(closeSc));
                fThread.Start();
                // SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);//关闭显示器
                //SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0);  // 启动屏保
            }
        }

        //跳转到QQ
        private void labelAuthor_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("https://user.qzone.qq.com/85161441");
        }

        //退出程序
        private void exit()
        {
            this.Dispose();//释放资源
            this.Close();//关闭当前窗口
            Application.Exit();//强制所有消息中止,退出所有的窗体
            Application.ExitThread();//强制中止调用线程上的所有消息
            System.Environment.Exit(0);//退出程序
        }

        //右键菜单关闭显示器
        private void closeSC_Click(object sender, EventArgs e) {
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
            notifyIcon1.Visible = false;//隐藏托盘
            i = 3;
            labelCountDown.Text = "" + i;//刷新显示为3
            timer1.Start();//计时器启动
        }

        //关闭显示器
        private void closeSc(){
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);//关闭显示器
        }
        //右键菜单退出
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            exit();
        }

        //窗体关闭按钮
        private void Form_main_FormClosing(object sender, FormClosingEventArgs e)
        {
            //窗体关闭原因为单击"关闭"按钮或Alt+F4  
             if (e.CloseReason == CloseReason.UserClosing)
             {
                WindowState = FormWindowState.Minimized;
                notifyIcon1.Visible = true;//显示托盘
                e.Cancel = true;           //取消关闭操作 表现为不关闭窗体  
                this.Hide();               //隐藏窗体  
            }
        }
    }
}

【推荐】无边框透明版下载(免积分,免费!!)

有边框有托盘下载(1积分)

点击下载源代码,整个工程(2积分)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
去年应朋友需要用C# 2.0写的一个按热键模拟鼠标单击操作程序,类似按键精灵,翻出来分享 实现功能:设定模拟鼠标单击/次的系统热键(热键自动保存),设定每单击的间隔毫数,按下设定好的热键程序便开始模拟鼠标单击操作,再按一次热键程序停止模拟并统计模拟鼠标单击的次数与时间误差。 演示程序:\HookSimulateMouse\bin\Debug\HookSimulateMouse.exe(需MS .NET Framework 2.0运行库支持) 程序界面: 1.设定时间间隔范围:1ms-1000ms,如:900ms 2.设置快捷键,如:Ctrl+Alt+W 将鼠标移至要模拟单击处按热键,于下一开始后计时,windowsXP不是实时系统,系统时间误差在20-55ms,而且通过程序获得(特别在CPU占用率高时)都会有延迟,要高精度需要凋API或者取CPU时钟频率,还要计算开机以来运行时长ms数,而且那是计时不是定时。 如:您设定系统时间ms数为900,于5点18分20569毫按下了快捷键,程序从下一0ms开始计时,在5点18分21900-908毫之间程序模拟一次鼠标单击(鼠标单击可能有8ms延迟) 以此类推直到您再按一次热键程序停止模拟并统计单击次数及毫误差(1s=1000ms) 按关闭X或双击桌面右下角系统托盘程序图标可隐藏/显示程序界面,至桌面右下角系统托盘 通过本C#程序源码可学习: 程序窗体最大化/最小化还原到系统托盘 调用系统DLL(user32.dll)设定全局热键控制程序,模拟鼠标单击操作 调用timer控件计时 Thread线程控制 FileStream文件流读写操作
C#写的闹钟应用程序。到处都是注释,一看就懂! 核心代码和效果展示见我的博客:http://blog.csdn.net/luochao5862426/article/details/78570141 个人特色: 1、可以这么所说,别人有的,我有!别人没有的,我也有。集百家之长,选我就对了,嘿嘿。 2、代码详细,基本上每一条稍微重要点的代码都有注释这行代码是干嘛的,所以你可以看到好多好多注释,详细的不能再详细! 3、里面包含,可直接导入的项目文件、该程序的PPT展示以及录制的视频展示。 4、模块清晰,注释详细,低耦合,高内聚。 主页面介绍:分三个部分 一、动态时钟部分,像石英钟一样时、分、针不停转动。 二、定点闹钟部分,简单点就是可以定闹钟。 三、闹钟备忘录部分,显而易见,为了添加提示功能。 本人设计了两种可选模式: 1、懒人模式(可多次延时响铃,下面主要讲述这个模式) 2、生存模式(本次考验失败后则下次的闹钟提前几分钟响铃。由于时间有限本人没去实现这个功能) 主要功能介绍: 一、时钟(石英钟) 1、使用C#的GDI+画出石英钟时、分、针不停转动的效果并加上了指针的尾巴。 二、闹钟 1、定闹钟时添加备注。 2、自选(默认铃声或本地铃声)试听铃声。所以机智的你可以当一个MP3用了。 3、设定多个闹钟。重点是,你可以设置不同类型(今天、每天、自定义星期、指定日期)的闹钟。 4、设定不同的响铃方式。包括:只响一次、不断响铃、静音响铃。 5、定时机。定闹钟的时候选择了定时机这个选项,那么,在闹钟到点后的一定时间内(我设置的3)会自动机。 6、开机自启动。这个可以自己设定,很多人不需要。 7、响铃抖屏。闹钟到点后会抖动一小段时间(我设置的3)的屏幕,并同步跳到你打开的所有窗口的最顶层窗体。 8、系统托盘。可以隐藏系统托盘。 三、备忘录 {备忘录组成:时段+时间+备注+尾巴(可删除,知识为了查看有哪些操作)} 1、移除所定的闹钟。 2、把闹钟备忘录保存至本地。 3、从本地导入至闹钟备忘录。所以你可以在本地修改备忘录咯,包括时间和内容。 4、修改闹钟备忘录内容。在程序界面修改备忘录。 5、查找备忘录内容。在程序界面查找备忘录内容。 6、显示倒计时。你在定闹钟的时候要是选了倒计时这个选项,则你可以在备忘录里面选中,显示倒计时

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值