iT邦幫忙

5

C# 開機啟動-新增機碼

開機啟動方法有3種
1.在OS上操作:在開始功能表的 "啟動" 加入程式的捷徑/放到啟動資料夾,開啟資料夾cmd:shell:startup
2.用C#寫入機碼
3.用 Windows Service 專案來開發,這樣就可以直接在設定服務時,開機啟動

我們這裡要做,用C#寫入機碼,讓AP於開機啟動
新增一個checkbox chkAutoOpen
新增一個button BtnSave
新增一個textbox txLog

勾選chkAutoOpen,按下按鈕,開始新增機碼
不勾選chkAutoOpen,按下按鈕,開始刪除機碼
Form打開時,chkAutoOpen會依目前機碼狀態顯示勾選或不勾選

這段是
新增機碼/檢查機碼是否存在/刪除機碼 的code

      
   class addToRegForRun
   {
       
       private static RegistryKey getRunKey()
       {
           RegistryKey rk1 = Registry.LocalMachine;
           RegistryKey rk2 = rk1.CreateSubKey("SOFTWARE");
           RegistryKey rk3 = rk2.CreateSubKey("Microsoft");
           RegistryKey rk4 = rk3.CreateSubKey("Windows");
           RegistryKey rk5 = rk4.CreateSubKey("CurrentVersion");
           RegistryKey rk6 = rk5.CreateSubKey("Run");
           return rk6;
       }
       public bool chk(string key, System.Windows.Forms.TextBox txLog)
       {
           bool result = true;
           //2. 註冊到registry file中讓開機自動啟動
           //using Microsoft.Win32;
           RegistryKey rk6 = getRunKey();
           object ret = rk6.GetValue(key, "找不到");
           txLog.Text += key + "  : " + ret.ToString() + Environment.NewLine;
           rk6.Close();
           if (ret.ToString() == "找不到")
               result = false;
           return result;
       }



       public void add(string key, string src_file)
       {
           //2. 註冊到registry file中讓開機自動啟動
           RegistryKey rk6 = getRunKey();
           rk6.SetValue(key, src_file);
           rk6.Close();

       }
       public void remove(string key)
       {
           //2. 註冊到registry file中讓開機自動啟動
           //using Microsoft.Win32;
           RegistryKey rk6 = getRunKey();
           object ret = rk6.GetValue(key, "找不到");
           if (ret.ToString() != "找不到")
               rk6.DeleteValue(key);
           rk6.Close();
       }
   }

載入前,先判斷是否已存在機碼,如果已存在,check =true

        private void Form2_Load(object sender, EventArgs e)
        { 
            addToRegForRun reg = new addToRegForRun();
            string key = "RemoteCallC";
            chkAutoOpen.Checked = reg.chk(key,txLog);
        }

執行按鈕

            addToRegForRun reg = new addToRegForRun();
            string key = "RemoteCallC";
            string value =   System.Environment.CommandLine.Replace("\"", "");  //會取得程式的位址加雙引號,所以要移掉
            if (chkAutoOpen.Checked)
            {
                reg.add(key, value);
                reg.chk(key,txLog);
            }
            else
                reg.remove(key);
            MessageBox.Show("end");

測試

新增機碼後,用chkreg檢查 & 可到msconfig中查看,是否已新增
刪除機碼後,用chkreg檢查 & 可到msconfig中查看,是否已刪除

待觀察

有人說,可能會被防毒軟體的主動防禦擋到 須注意

ref

https://msdn.microsoft.com/zh-tw/library/microsoft.win32.registrykey.aspx
http://end-note.zipko.info/377.html
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20091027161244JD5&fumcde=FUM20050124192253INM


尚未有邦友留言

立即登入留言