亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# winform程序實現開機自啟動并且識別是開機啟動還是雙擊啟動

2019-10-29 19:58:05
字體:
來源:轉載
供稿:網友

開機啟動程序,在很多場合都會用到,尤其是那種在后臺運行的程序。

效果圖:

C#,winform,程序,開機,啟動

C#,winform,程序,開機,啟動

以上兩幅圖都用到了命令行啟動程序,為了模擬開機啟動或者其他程序調用此程序。

第一幅圖:程序啟動可以根據不同參數,執行不同的操作。如果是雙擊啟動,就自動運行邏輯代碼,如果是帶特定參數啟動,就自動運行邏輯代碼。

第二幅圖:winform 程序設置開機啟動,模擬雙擊啟動和開機啟動的不同效果。

開機啟動并自動運行方法:其實思路很簡單,就是將程序添加到注冊表中,這設置值的時候,加一個參數就可以了。然后程序在入口函數處判斷啟動參數,如果有啟動參數,就走自動運行邏輯代碼,如果沒有,就只是程序啟動,并不運行邏輯代碼。

【Main參數】

   在C/C++中,我們很明確的知道 main(int argc, char *argv[]/*, char *envp[]*/) 函數有兩(三)個參數,第三個參數一般用得少,我是還沒用到過。所以常見的都是用兩個參數。第一個是參數個數,非負數。第二個是表示從執行環境傳遞給程序的各個實參。也就是說,我們要用程序入口參數,只需要判斷argc的值,然后使用數組取argv的值就行。

  那么到了C#就變的更簡單了。直接變成 string[] 了。那么你只要遍歷這個字符串數組就可以了。

C#,winform,程序,開機,啟動

  我們用VS創建命令行工程的時候,如果是命令行程序那么VS會默認使用帶參數的main函數:void Main(string [] args);如果是winform工程,VS是默認使用void Main()。其實無論默認使用哪個都無所謂,主要是自己要清楚main函數的格式,以及代表的含義。main函數不光有參數,還可以有返回值。其實我們平時寫的C#工程中main函數看似沒有返回值,其實是可以帶有int類型的返回值的。如果你不清楚這一塊,傳送門。

  那如果我們用的是 void Main() 這種形式我們怎么獲取程序入庫參數?這里其實是只是一個表面現象。別以為你不帶參數,我就獲取不到了 ^_^ 。微軟為我們提供了一個類:Environment。這個類比較強大。如果你還不清楚怎么用,那去 MSDN 搜一下就會了。獲取命令行參數也就一個函數而已: string[] Environment.GetCommandLineArgs();使用這個方法需要注意就是返回值是數組類型,第一個元素包含正在執行的程序的文件名,從第二個參數開始,才是命令行參數。其實這個辦法就剛好解決了 winform 程序中獲取命令行參數的問題。

【注冊表操作】

將程序啟動寫入注冊表實現開機啟動,這個感覺沒什么好說的。使用固定方法操作就行。不過用有一點需要注意就是在訪問注冊表的時候可能會提示沒有權限,你這個網上百度有好多方法。但是MSDN中也給出了方法。就是在工程的中添加應用程序文件清單中修改一句就可以了。

C#,winform,程序,開機,啟動

核心代碼:

using System;using Microsoft.Win32;namespace AutoStartRun{  public sealed class SystemHelper  {    private SystemHelper() { }    /// <summary>    /// 設置程序開機啟動    /// </summary>    /// <param name="strAppPath">應用程序exe所在文件夾</param>    /// <param name="strAppName">應用程序exe名稱</param>    /// <param name="bIsAutoRun">自動運行狀態</param>    public static void SetAutoRun(string strAppPath, string strAppName, bool bIsAutoRun)    {      try      {        if (string.IsNullOrWhiteSpace(strAppPath)          || string.IsNullOrWhiteSpace(strAppName))        {          throw new Exception("應用程序路徑或名稱為空!");        }        RegistryKey reg = Registry.LocalMachine;        RegistryKey run = reg.CreateSubKey(@"SOFTWARE//Microsoft//Windows//CurrentVersion//Run/");        if (bIsAutoRun)        {          run.SetValue(strAppName, strAppPath);        }        else        {          if (null != run.GetValue(strAppName))          {            run.DeleteValue(strAppName);          }        }        run.Close();        reg.Close();      }      catch (Exception ex)      {        throw new Exception(ex.Message, ex);      }    }    /// <summary>    /// 判斷是否開機啟動    /// </summary>    /// <param name="strAppPath">應用程序路徑</param>    /// <param name="strAppName">應用程序名稱</param>    /// <returns></returns>    public static bool IsAutoRun(string strAppPath, string strAppName)    {      try      {        RegistryKey reg = Registry.LocalMachine;        RegistryKey software = reg.OpenSubKey(@"SOFTWARE");        RegistryKey run = reg.OpenSubKey(@"SOFTWARE//Microsoft//Windows//CurrentVersion//Run/");        object key = run.GetValue(strAppName);        software.Close();        run.Close();        if (null == key || !strAppPath.Equals(key.ToString()))        {          return false;        }        return true;      }      catch (Exception ex)      {        throw new Exception(ex.Message, ex);      }    }  }}

 調用方法:

 /// <summary>    /// 設置程序開機自啟動    /// </summary>    private void SetAutoRun()    {      string strFilePath = Application.ExecutablePath;      string strFileName = System.IO.Path.GetFileName(strFilePath);      try      {        SystemHelper.SetAutoRun(strFilePath + " -autostart", strFileName, !menuAutoRun.Checked);        menuAutoRun.Checked = !menuAutoRun.Checked;      }      catch (Exception ex)      {        MessageBox.Show(this, ex.Message, "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);      }    }    

設置開機啟動就是如此簡單。

【開機啟動并運行】

 那這個就不用說了,將命令行參數和開機注冊表操作結合起來就可以了。

示例代碼:       

/// <summary>    /// 檢查是否開機啟動,并設置控件狀態    /// </summary>    private void CheckAutoRun()    {       string strFilePath = Application.ExecutablePath;      string strFileName = System.IO.Path.GetFileName(strFilePath);      if (SystemHelper.IsAutoRun(strFilePath + " -autostart", strFileName))      {        menuAutoRun.Checked = true;      }      else      {        menuAutoRun.Checked = false;      }    }    private void AutoRun()    {      if (menuAutoRun.Checked)      {        string[] strArgs = Environment.GetCommandLineArgs();        if (strArgs.Length >= 2 && strArgs[1].Equals("-autorun"))        {          labText.Text = "我是開機自啟動運行...";        }      }    }

總結

以上所述是小編給大家介紹的C# winform程序實現開機自啟動并且識別是開機啟動還是雙擊啟動,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人在线精品| 日本久久中文字幕| 97成人在线视频| 91在线国产电影| 国产成人一区三区| 欧美精品久久一区二区| 欧美整片在线观看| 日韩在线播放av| 色狠狠av一区二区三区香蕉蜜桃| 亚洲电影免费观看高清完整版在线观看| 欧美日韩在线免费| 亚洲天堂av在线播放| 久久久精品久久久久| 在线看日韩av| 国产一区二区三区四区福利| 88xx成人精品| 亚洲aⅴ男人的天堂在线观看| 欧美wwwwww| 国产一区二区三区日韩欧美| 亚洲国产精品va在看黑人| 欧美日韩一区二区免费在线观看| 亚洲iv一区二区三区| 97久久久免费福利网址| 久久天天躁狠狠躁夜夜躁2014| 91在线视频成人| 欧美资源在线观看| 91精品国产高清久久久久久久久| 日本精品中文字幕| 国产一区二区三区毛片| 九色精品美女在线| 国产一区二区三区视频在线观看| 午夜精品一区二区三区av| 日韩精品久久久久久福利| 91久久在线观看| 欧美第一黄色网| 欧美国产日韩一区| 日韩av影视在线| 欧美精品亚州精品| 国产成人av在线播放| 欧美专区日韩视频| 国产精品爱啪在线线免费观看| 欧洲中文字幕国产精品| 国内精品视频久久| 精品国产一区av| 91在线观看免费高清| 亚洲精品狠狠操| 国产在线拍偷自揄拍精品| 麻豆成人在线看| 亚洲成人黄色在线观看| 国产精品视频中文字幕91| 精品国产一区av| 亚洲精品按摩视频| 亚洲区在线播放| 国产一区二区免费| 成人福利免费观看| 色综合天天综合网国产成人网| 亚洲男人av电影| 欧美精品18videos性欧美| 日韩精品在线私人| 久久精品精品电影网| 久久久久久尹人网香蕉| 欧美精品日韩www.p站| 日韩av电影手机在线| 人人爽久久涩噜噜噜网站| 久久久久北条麻妃免费看| 成人国产精品一区二区| 国产精品夜间视频香蕉| 日韩精品在线播放| 精品av在线播放| 亚洲男人天堂网| 亚洲影院在线看| 毛片精品免费在线观看| 一区二区欧美日韩视频| 国产丝袜一区二区| 日韩av在线网站| 91在线观看免费高清完整版在线观看| 欧美激情亚洲激情| 欧美日韩精品在线播放| 久久偷看各类女兵18女厕嘘嘘| 日韩成人性视频| 久久久久免费精品国产| 欧美疯狂xxxx大交乱88av| 亚洲精品97久久| 91夜夜揉人人捏人人添红杏| 国产亚洲精品va在线观看| 欧美亚洲成人xxx| 亚洲男人的天堂在线播放| 亚洲在线第一页| 国产精品久久国产精品99gif| 国产欧美日韩精品在线观看| 亚洲欧美日本伦理| 色偷偷91综合久久噜噜| 777精品视频| 亚洲视频在线观看免费| 欧美色另类天堂2015| 69久久夜色精品国产69| 久久精品视频播放| 久久久极品av| 97人洗澡人人免费公开视频碰碰碰| 成人黄色av播放免费| 亚洲黄色在线看| 亚洲色图25p| 国产精品九九久久久久久久| 久久久久久久久久婷婷| 国内揄拍国内精品| 久久久久久九九九| 岛国视频午夜一区免费在线观看| 国产不卡精品视男人的天堂| 欧美成人午夜激情| 久久久久久999| 成人h猎奇视频网站| 日韩激情第一页| 在线观看日韩www视频免费| 欧美日韩免费在线观看| 国产精品久久久久久久久久免费| 91九色国产社区在线观看| 久久久久成人网| 国产午夜精品全部视频播放| 欧美激情一级精品国产| 亚洲欧美国产日韩天堂区| 国产97在线|日韩| 91免费国产网站| 亚洲一区中文字幕在线观看| 国产精品自在线| 国产精品视频精品| 亚洲va久久久噜噜噜久久天堂| 欧美一级大片在线免费观看| 亚洲欧美制服第一页| 国产91在线播放| 国内成人精品一区| 日韩欧美成人免费视频| 色综合久久久888| 国产日韩在线视频| 国产在线98福利播放视频| 精品久久久久久久久国产字幕| 亚洲女人天堂网| 91精品国产91久久久久久吃药| 久久精品亚洲精品| 亚洲成人av在线播放| 色综合久久精品亚洲国产| 国产精品久久久久福利| 国产精品久久久久久久久久久久久| 亚洲精选在线观看| 久久精品成人欧美大片古装| 久久久亚洲成人| 成人午夜激情网| 久久精品国产亚洲精品| 欧美性理论片在线观看片免费| 中文字幕日韩综合av| 91免费在线视频网站| 青青草一区二区| 亚洲欧美国内爽妇网| 国产不卡av在线| 亚洲天堂成人在线| 亚洲区在线播放| 国产精品日日做人人爱| 国产精品视频永久免费播放| 亚洲自拍偷拍网址| 日本国产精品视频| 久久久国产视频| 国产精品久久久久久久7电影| 91亚洲精品久久久| 在线观看欧美视频| 日韩女优人人人人射在线视频|