C# 開機自啟動和最小化托盤顯示


C# 開機自啟動和最小化托盤顯示

一、      C# 開機自啟動

C# 開機自啟動,這個功能是大多數服務型軟件很常用一個功能,但是這個功能確是不

太好做,花了兩天想對策。不過最終呢,結果還是很滿意的。

 這個功能要達到的效果是這樣的,所有用戶開機自啟動。

 最初在網上找的資料都是修改注冊表,基本上都是行如這樣的:

//獲取程序執行路徑..  

string starupPath = Application.ExecutablePath;
//class Micosoft.Win32.RegistryKey. 表示Window注冊表中項級節點,此類是注冊表裝.
RegistryKey loca = Registry.LocalMachine;
RegistryKey run = loca.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM