• C# 开机自启动和最小化托盘显示


    C# 开机自启动和最小化托盘显示

    一、      C# 开机自启动

    C# 开机自启动,这个功能是大多数服务型软件很常用一个功能,但是这个功能确是不

    太好做,花了两天想对策。不过最终呢,结果还是很满意的。

     这个功能要达到的效果是这样的,所有用户开机自启动。

     最初在网上找的资料都是修改注册表,基本上都是行如这样的:

    //获取程序执行路径..  

    string starupPath = Application.ExecutablePath;
    //class Micosoft.Win32.RegistryKey. 表示Window注册表中项级节点,此类是注册表装.
    RegistryKey loca = Registry.LocalMachine;
    RegistryKey run = loca.CreateSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionRun");
     try
    {
        //SetValue:存储值的名称
      run.SetValue("qidong", starupPath);
      MessageBox.Show("已启用开机运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
      loca.Close();
    }
    catch (Exception ee)
    {
        MessageBox.Show(ee.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    结果我尝试的时候,发现根本就不行,在SetValue这块就出错了,报错的Message 是无访问权限,真的是折腾了很久,整UAC 权限之类的,最后还是放弃了,这种写法在XP 上还是可以成功的,因为XP 没有UAC权限的说法,而win7 这个权限砍绕不过去。

             尝试第二种方法,通过注册服务,让服务启动界面程序,这种方式貌似是可以的,只不过我没有尝试成功。有兴趣的可以继续试试。

             尝试第三种方法,就是将启动的界面程序快捷方式拷贝到启动目录下,这种方式确实可以达到效果,但是当时考虑到会不会只对当前用户有效,然后测试了下用另一账户登录,果然不行,这个时候,居然发现win7 下居然有一个所有用户的启动目录,哎只怪自己太年轻了。我把快捷方式放置在该目录下,居然正常运行。示例代码如下:

    try
    {
    
       if (checkBoxReboot.Checked)
      {
    
           string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonStartup);
         //获得文件的当前路径 
         string dir = Directory.GetCurrentDirectory();
            //获取可执行文件的全部路径 
            string exeDir = dir + @"EcgNetPlug.exe.lnk";
            System.IO.File.Copy(exeDir, StartupPath + @"EcgNetPlug.exe.lnk", true);
       }
       else
       {
            string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonStartup);
         System.IO.File.Delete(StartupPath + @"EcgNetPlug.exe.lnk");
      }
    }
    catch(Exception ex)
    { MessageBox.Show(ex.Message); }

        当然这种方式还是有点简单粗暴,比如有的用户想开机启动,有的用户又不想开机启动,那怎么办,其实这种我们可以通过配置文件和逻辑判断肯定是可以实现的。

    二、      最小化托盘显示

    这个我们要达到的效果是,启动时隐藏,双击托盘显示。

    第一步:首先我们要创建一个空的winform 窗体。

     

    第二步:向窗体拖动NotifyIcon 和 ContextMeauStrip 控件

     

     第三步:最重要的一步,就是在NotifyIcon 属性中选择该ContextMeauStrip 控件,要不然右键NotifyIcon是出不来 菜单的。并且设置Icon 图标

     

      第四步:给ContextMeauStrip 增加退出菜单,并且增加响应函数

     private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
     {
    
           this.Close();
     } 

     第五步:让窗体初始化的时候隐藏

      private void Form1_Load(object sender, EventArgs e)
            {
                //隐藏窗体
                this.WindowState = FormWindowState.Minimized;
            }
            private void Form1_Resize(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Visible = false;
                    this.notifyIcon1.Visible = true;
                }
            }

    第六步:给NotifyIcon 增加双击事件

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                this.Visible = true;
                this.WindowState = FormWindowState.Normal;
                this.Show();
            }

    第七步:这是会看到图标在任务栏还存在,设置ShowInTaskbar 属性为false.

     

    第八步:大功告成。

    代码地址 http://github.com/liningg/notifyicon.git

  • 相关阅读:
    Oracle函数题
    多态
    继承
    封装
    属性和修饰符
    方法重载
    构造方法
    类与实例
    SQL Server 2005 To Oracle
    Toad for Oracle 使用文档
  • 原文地址:https://www.cnblogs.com/techdreaming/p/7237896.html
Copyright © 2020-2023  润新知