C#一行代码实现系列原创分享

觉得对您有帮助,帮忙推荐加关注

Nuget Package下载

https://www.nuget.org/packages/Sayaka.Common/

目录

  • 此页面会更新链接,保存此页面即可

初步计划完成以下内容

  1. 窗口程序

    1. 最小化到通知区域
    2. 设置开机启动
    3. 关闭窗口前弹出确认窗口
    4. 跨线程设置控件值,免去InvokeRequired通用方法1
    5. 跨线程设置控件值,免去InvokeRequired通用方法2
    6. 跨线程获取控件值,结合BeginInvokeEndInvoke使用,以DataGridView为例
    7. 遍历窗口所有控件,通过类和名称模糊筛选
  2. 运行CMD程序

    1. 无窗口运行CMD程序
    2. 注册OCX控件
  3. App.Config配置文件读写

    1. App.Config参数
    2. App.Config参数
    3. 绑定控件TextApp.Config参数
  4. 注册表读写

    1. 读注册表
    2. 写注册表
  5. 文本文件读写

    1. 读文本文件
    2. 写文本文件
  6. Win32API封装

    1. 通过ClassNameWindowText模糊查找所有顶级窗口
    2. 通过ClassNameWindowText模糊查找窗口内所有子控件
    3. 发送消息
    4. 模拟点击其他程序窗口按钮
    5. 在其他程序窗口上模拟按键
    6. 正常关闭其他窗口
    7. 强制关闭其他窗口
    8. 获取窗口属性
    9. 修改窗口属性
    10. 获取窗口位置和大小
    11. 修改窗口位置和大小
    12. 其他
  7. 先列到这里,未完待续……

主要功能

  • 实现Winform程序最小化后,隐藏任务栏显示,在通知区域显示。左键点击通知区域图标,可以弹出菜单,包含开机启动退出程序,可以根据需求进行定制。

一行代码

private void Form1_Load(object sender, EventArgs e)
{
    this.ExAddNotifyIcon();
}

代码封装

/// <summary>
/// 添加通知图标,左键点击切换窗口显示,右键点击弹出菜单
/// </summary>
/// <param name="form"></param>
/// <param name="tipText"></param>
/// <param name="timeout"></param>
/// <param name="tipIcon"></param>
/// <returns></returns>
public static NotifyIcon ExAddNotifyIcon(this Form form, string tipText = "程序最小化至后台运行,点击图标显示程序", int timeout = 3000, ToolTipIcon tipIcon = ToolTipIcon.Info)
{
    NotifyIcon notifyIcon = new NotifyIcon();
    notifyIcon.Icon = form.Icon;
    notifyIcon.Visible = true;
    notifyIcon.Text = form.Text;
    notifyIcon.BalloonTipText = form.Text;
    notifyIcon.MouseClick += (sender, args) =>
    {
        if (args.Button == MouseButtons.Left)
        {
            if (!form.Visible)
            {
                form.Show();
                form.WindowState = FormWindowState.Normal;
                form.TopMost = true;
                form.TopMost = false;
            }
            else
            {
                form.WindowState = FormWindowState.Minimized;
                form.Hide();
            }
        }
    };
    notifyIcon.ContextMenu = new ContextMenu(new MenuItem[]
    {
        new MenuItem("开机启动", (sender, args) => { ((MenuItem) sender).Checked = form.ExSwitchRunOnSystemStart(); })
        {
            Checked = form.ExIsRunOnSystemStart()
        },
        new MenuItem("退出程序", (sender, args) => { form.Close(); }),
    });
    form.SizeChanged += (sender, args) =>
    {
        if (form.WindowState == FormWindowState.Minimized)
        {
            form.Hide();
            notifyIcon.ShowBalloonTip(timeout, form.Text, tipText, tipIcon);
        }
    };
    form.FormClosed += (sender, args) => { notifyIcon.Dispose(); };
    return notifyIcon;
}

声明