麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

C# winform程序?qū)崿F(xiàn)開機自啟動并且識別是開機啟動還是雙擊啟動

2019-10-29 19:58:05
字體:
供稿:網(wǎng)友

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

效果圖:

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

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

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

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

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

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

【Main參數(shù)】

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

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

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

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

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

【注冊表操作】

將程序啟動寫入注冊表實現(xiàn)開機啟動,這個感覺沒什么好說的。使用固定方法操作就行。不過用有一點需要注意就是在訪問注冊表的時候可能會提示沒有權(quán)限,你這個網(wǎng)上百度有好多方法。但是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">自動運行狀態(tài)</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);      }    }  }}

 調(diào)用方法:

 /// <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);      }    }    

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

【開機啟動并運行】

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

示例代碼:       

/// <summary>    /// 檢查是否開機啟動,并設置控件狀態(tài)    /// </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 = "我是開機自啟動運行...";        }      }    }

總結(jié)

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


注:相關教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精品毛片 | 91午夜少妇三级全黄 | 中国免费一级毛片 | 久久久中 | 日本中文字幕电影在线观看 | 国产精品99久久免费观看 | 欧美一区二区三区免费不卡 | 竹内纱里奈和大战黑人 | 深夜精品福利 | 97久色| 制服丝袜日日夜夜 | 日本在线不卡一区二区三区 | 99国产精品欲a | 国产在线观看91精品 | 亚洲最新黄色网址 | 欧美黄色一区 | 日本高清视频网站www | 成人国产精品久久 | av成人免费 | 中文字幕一二三区芒果 | 黄色av电影在线播放 | 成年人在线免费播放视频 | 国产午夜亚洲精品 | bt 自拍 另类 综合 欧美 | 欧美成人二区 | 国产亚洲高清视频 | 天天看成人免费毛片视频 | 亚洲网站在线观看 | 欧美性生话视频 | 国产精品高潮视频 | 亚洲自拍第二页 | 国产毛片视频 | 欧美a视频| 国产精品久久久久久久久久久久午夜 | 做羞羞视频 | 性aaa| 狠狠色噜噜狠狠狠米奇9999 | 免费午夜视频在线观看 | 午夜视频播放 | 亚洲成在人 | 日韩av日韩 |