winForm程序开机启动和托盘显示,并允许一个程序运行

1、建一个WinForm程序—TestIconForm,将其属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示;将MaximizeBox属性设置为false,屏蔽掉最大化按钮;把StartPosition属性改为CerternScreen,这样程序运行后,窗口将会居中显示。

2、在工具栏中的公共控件里,拖入NotifyIcon控件—NotifyIcon1,这个是程序运行任务栏右侧通知区域图标显示控件。

3、在工具栏中的菜单和工具栏里,拖入ContextMenuStrip—ContextMenuStrip1,这个控件是右击时关联菜单。

4、右键NotifyIcon1选择属性,将其属性ContextMenuStrip改加为testContextMenuStrip,这个时候1和2两个步骤的两个控件就关联了,用于完成上面(3)功能。

5、右键testContextMenuStrip选择属性,进入Items,然后点击“添加”,这里添加三个菜单选项:exitMenuItem、hideMenuItem、showMenuItem,同时分别将其Text属性改为:退出、隐藏和显示。

 private void OPCValue_Load(object sender, EventArgs e)
        {
            this.Hide();
        }

#region 托盘处理
        private void OPCValue_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            HideMainForm();
        }

        private void OPCValue_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                HideMainForm();
            }

        }

        private void ShowMenuItem_Click(object sender, EventArgs e)
        {
            ShowMainForm();
        }

        private void HideMenuItem_Click(object sender, EventArgs e)
        {
            HideMainForm();
        }

        private void ExitMenuItem_Click(object sender, EventArgs e)
        {
            ExitMainForm();
        }

        #region 处理窗体的 显示 隐藏 关闭(退出)
        private void ExitMainForm()
        {
            if (MessageBox.Show("您确定要退出OPC数据接收程序吗?", "确认退出 ", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                this.notifyIcon1.Visible = false;
                this.Close();
                this.Dispose();
                Application.Exit();

            }
        }

        private void HideMainForm()
        {
            this.Hide();
        }

        private void ShowMainForm()
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
        }

        #endregion

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                this.WindowState = FormWindowState.Minimized;
                HideMainForm();
            }
            else if (this.WindowState == FormWindowState.Minimized)
            {
                ShowMainForm();
            }
        }
        #endregion

只运行一个程序运行代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OPCValues
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            int processCount = 0;
            Process[] pa = Process.GetProcesses();//获取当前进程数组。
            foreach (Process PTest in pa)
            {
                if (PTest.ProcessName == Process.GetCurrentProcess().ProcessName)
                {
                    processCount += 1;
                }
            }
            if (processCount > 1)
            {
                MessageBox.Show(null, "相同的程序已经在运行了,请不要同时运行多个程序!\n\n这个程序即将退出!",
                    Application.ProductName + "退出程序", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               // Application.Exit();

                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new OPCValue());
        }
    }
}
时间: 2024-10-13 20:32:04

winForm程序开机启动和托盘显示,并允许一个程序运行的相关文章

C# winForm程序开机启动和托盘显示 (转http://blog.csdn.net/xinyue3054/article/details/6599508)

这段时间一直进行cs项目,故整理下开机自动运行.托盘.显示.隐藏. (1).在窗口上点击关闭按钮或者最小化时将托盘显示: (2).双击托盘图标显示窗口: (3).右键点击托盘图标提供三个菜单选项,“退出”.“隐藏”.“显示”: (4).程序可以设置开机启动,隐藏任务栏显示.就这四个小功能. 1.建一个WinForm程序—FormAuto,将其属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示:将MaximizeBox属性设置为false,屏蔽掉最大化按钮:把StartPo

C# Winform 注册程序开机启动

1 开机启动 public static bool SetAutoRun(string keyName, string filePath) { try { RegistryKey Local= Registry.LocalMachine; RegistryKey runKey =Local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"); runKey.SetValue(keyName, filePath)

CentOS设置程序开机启动程序/服务的方法(转)

注意:CentOS 6下基本没什么问题,CentOS 7估计不一定能行. 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd. #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in

启动IIS 网站出现错误 另一个程序正在使用此文件,进程无法访问

可能你安装了Apache; IIS启动失败,手工启动它,提示:"另一个程序正在使用此文件,进程无法访问!" 怀疑80端口被其他程序占用,改为8080后正常. 在DOS下输入: netstat -ano 查看80端口信息中的PID号,然后打开任务管理器查看对应PID的程序名称. 打开任务管理器,点击"查看"/选择列,勾选"PID(进程标识符)",然后单击"进程"标签,找到80端口对应的pid,就可以看到是那个程序占用的了.启动I

winform 程序开机启动

private void Form1_Load(object sender, EventArgs e) { try { //程序运行位置 string R_startPath = Application.ExecutablePath; //对应于HKEY_LOCAL_MACHINE主键 RegistryKey R_local = Registry.LocalMachine; //开机自动运行 RegistryKey R_run = R_local.CreateSubKey("SOFTWARE\\

Qt程序开机启动的怪现象————无法正常显示程序皮肤

事情很简单:最近公司项目在做即时通讯软件,类似QQ.该软件应该支持开机启动这样的常用功能.但是实际上开发该功能的时候碰到了个问题:开机启动程序无法正常加载皮肤文件. 这个问题让我头疼了很久啊.最终确定问题出现在程序的打包皮肤文件上.因为界面使用的是qt所以,皮肤等资源文件都是应该放在qrc文件中进行统一管理的.但是实际上该程序的资源文件却都是在外面的.这样的结果就是正常启动程序没有问题,开机启动就会加载不上皮肤文件. 下面就是我想到的解决方法: 方法一:修改qrc文件,将所有的资源文件都添加到q

node-webkit设置程序开机启动

上一篇写了打包脚本中设置安装时开机启动,这一篇写由node.js来控制程序是否随windows系统开机启动. 首页在项目package.json中加入对windows-shortcuts的引用(手动下载地址https://github.com/j201/windows-shortcuts) "dependencies": { "windows-shortcuts":"*" } 在npm install windows-shortcuts,加入快捷

C# 执行bat文件 批处理 - 实现应用程序开机启动功能

最近在做一个项目(平台 .net 4.0 winform)的时候,客户要求软件能提供开机启动的设置选项 开始的时候,实现方法如下: public class Boot { //写入注册表 public static void bootFromBoot(string ExeName, string ExePath) { RegistryKey rKey = Registry.LocalMachine; RegistryKey autoRun = rKey.CreateSubKey(@"SOFTWA

在android系统上写C语言程序--开机启动该程序不进入安卓系统

今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西. 关于这个问题,相信很多学Android的都会去关注这个问题,大家普遍会有个这样的疑问:安卓是怎么跑起来的? 最简单的说法,安卓系统是这样加载的: Bootloader------Kernel(对应平台版本的Linux内核)------filesystem文件系统(这个就