激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# winform程序實現開機自啟動并且識別是開機啟動還是雙擊啟動

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

2022-03-03 13:54碧水青荷 C#

這篇文章主要介紹了C# winform程序實現開機自啟動并且識別是開機啟動還是雙擊啟動的實現代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

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

效果圖:

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程序實現開機自啟動并且識別是開機啟動還是雙擊啟動

核心代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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);
      }
    }
  }
}

 調用方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <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);
     }
   }

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

【開機啟動并運行】

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

示例代碼:       

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// <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程序實現開機自啟動并且識別是開機啟動還是雙擊啟動,希望對大家有所幫助,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/hjsstudio/archive/2018/10/29/9863857.html

延伸 · 閱讀

精彩推薦
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
主站蜘蛛池模板: 成人aaaa免费全部观看 | 一级片在线免费 | 欧美特黄a | 日本精品久久久久久草草 | 久久免费视频3 | 亚洲午夜视频 | 日韩精品久久久久久久电影99爱 | 国产一区二区视频观看 | 亚洲免费看片网站 | 在线无码 | 露脸各种姿势啪啪的清纯美女 | 92精品国产自产在线 | 久久精品观看 | 成人午夜网址 | 亚洲成人免费网站 | 精品国产乱码久久久久久丨区2区 | 欧美日日操| 石原莉奈日韩一区二区三区 | 黄色网址在线播放 | 狠狠干最新网址 | 日本网站一区 | 亚洲3p激情在线观看 | 免费黄色入口 | 毛片免费视频 | 日本高清一级片 | 久色婷婷 | 久久情爱网 | 黄色一级毛片免费看 | 久操免费在线视频 | 国产精品99精品 | 羞羞的视频在线免费观看 | 欧美日韩一区二区综合 | jj视频在线播放 | 日本高清电影在线播放 | 一级毛片电影院 | 国产乱xxxx | 国产va在线观看 | 亚洲视频在线一区二区 | 黄色一级毛片免费看 | 国产精品久久久久久久娇妻 | 蜜桃视频最新网址 |