国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C# - C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

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

這篇文章主要介紹了C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

開(kāi)機(jī)啟動(dòng)程序,在很多場(chǎng)合都會(huì)用到,尤其是那種在后臺(tái)運(yùn)行的程序。

效果圖:

C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

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

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

第二幅圖:winform 程序設(shè)置開(kāi)機(jī)啟動(dòng),模擬雙擊啟動(dòng)和開(kāi)機(jī)啟動(dòng)的不同效果。

開(kāi)機(jī)啟動(dòng)并自動(dòng)運(yùn)行方法:其實(shí)思路很簡(jiǎn)單,就是將程序添加到注冊(cè)表中,這設(shè)置值的時(shí)候,加一個(gè)參數(shù)就可以了。然后程序在入口函數(shù)處判斷啟動(dòng)參數(shù),如果有啟動(dòng)參數(shù),就走自動(dòng)運(yùn)行邏輯代碼,如果沒(méi)有,就只是程序啟動(dòng),并不運(yùn)行邏輯代碼。

【main參數(shù)】

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

  那么到了c#就變的更簡(jiǎn)單了。直接變成 string[] 了。那么你只要遍歷這個(gè)字符串?dāng)?shù)組就可以了。

C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

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

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

【注冊(cè)表操作】

將程序啟動(dòng)寫(xiě)入注冊(cè)表實(shí)現(xiàn)開(kāi)機(jī)啟動(dòng),這個(gè)感覺(jué)沒(méi)什么好說(shuō)的。使用固定方法操作就行。不過(guò)用有一點(diǎn)需要注意就是在訪問(wèn)注冊(cè)表的時(shí)候可能會(huì)提示沒(méi)有權(quán)限,你這個(gè)網(wǎng)上百度有好多方法。但是msdn中也給出了方法。就是在工程的中添加應(yīng)用程序文件清單中修改一句就可以了。

C# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng)

核心代碼:

?
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>
    /// 設(shè)置程序開(kāi)機(jī)啟動(dòng)
    /// </summary>
    /// <param name="strapppath">應(yīng)用程序exe所在文件夾</param>
    /// <param name="strappname">應(yīng)用程序exe名稱</param>
    /// <param name="bisautorun">自動(dòng)運(yùn)行狀態(tài)</param>
    public static void setautorun(string strapppath, string strappname, bool bisautorun)
    {
      try
      {
        if (string.isnullorwhitespace(strapppath)
          || string.isnullorwhitespace(strappname))
        {
          throw new exception("應(yīng)用程序路徑或名稱為空!");
        }
        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>
    /// 判斷是否開(kāi)機(jī)啟動(dòng)
    /// </summary>
    /// <param name="strapppath">應(yīng)用程序路徑</param>
    /// <param name="strappname">應(yīng)用程序名稱</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)用方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>
   /// 設(shè)置程序開(kāi)機(jī)自啟動(dòng)
   /// </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, "錯(cuò)誤提示", messageboxbuttons.ok, messageboxicon.error);
     }
   }

設(shè)置開(kāi)機(jī)啟動(dòng)就是如此簡(jiǎn)單。

【開(kāi)機(jī)啟動(dòng)并運(yùn)行】

 那這個(gè)就不用說(shuō)了,將命令行參數(shù)和開(kāi)機(jī)注冊(cè)表操作結(jié)合起來(lái)就可以了。

示例代碼:       

?
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>
    /// 檢查是否開(kāi)機(jī)啟動(dòng),并設(shè)置控件狀態(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 = "我是開(kāi)機(jī)自啟動(dòng)運(yùn)行...";
        }
      }
    }

總結(jié)

以上所述是小編給大家介紹的c# winform程序?qū)崿F(xiàn)開(kāi)機(jī)自啟動(dòng)并且識(shí)別是開(kāi)機(jī)啟動(dòng)還是雙擊啟動(dòng),希望對(duì)大家有所幫助,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品免费久久久久久久久久中文 | 亚洲激情精品 | 亚洲人成网站999久久久综合 | 男人天堂亚洲 | 国产黄色小视频 | 91精品久久久久久久久 | 欧美一区二区三区在线观看视频 | 91麻豆精品国产91久久久资源速度 | 国产精品99精品久久免费 | 看国产黄色片 | 日本福利在线观看 | 久久久亚洲精品一区二区三区 | 欧美日韩在线精品 | 成人三区 | 久久久久久久久久久久网站 | 国产专区在线看 | 免费看黄色一级电影 | 91久久精品日日躁夜夜躁国产 | 91麻豆蜜桃一区二区三区 | 亚洲成人三级 | 狠狠干天天干 | 超碰首页| 国产高潮国产高潮久久久91 | 国产精品欧美一区二区三区不卡 | 国产视频久久久久久久 | 淫片免费观看 | 国产一区二区精品久久岳 | 高清免费毛片 | 久久狠狠 | 毛片免费的 | 日韩中文视频 | 日韩欧美亚洲精品 | 欧美一区永久视频免费观看 | 亚洲精品一二区 | 91精品国产综合久久福利软件 | 韩日精品一区 | 日韩欧美在线综合 | 九一午夜精品av | 久久久久久国产精品免费免费狐狸 | 一本大道专区 | 日韩成人在线影院 |