開機啟動程序,在很多場合都會用到,尤其是那種在后臺運行的程序。
創(chuàng)新互聯(lián)公司為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè), 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。
效果圖:


以上兩幅圖都用到了命令行啟動程序,為了模擬開機啟動或者其他程序調(diào)用此程序。
第一幅圖:程序啟動可以根據(jù)不同參數(shù),執(zhí)行不同的操作。如果是雙擊啟動,就自動運行邏輯代碼,如果是帶特定參數(shù)啟動,就自動運行邏輯代碼。
第二幅圖:winform 程序設(shè)置開機啟動,模擬雙擊啟動和開機啟動的不同效果。
開機啟動并自動運行方法:其實思路很簡單,就是將程序添加到注冊表中,這設(shè)置值的時候,加一個參數(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[] 了。那么你只要遍歷這個字符串?dāng)?shù)組就可以了。

我們用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中也給出了方法。就是在工程的中添加應(yīng)用程序文件清單中修改一句就可以了。

核心代碼:
using System;
using Microsoft.Win32;
namespace AutoStartRun
{
public sealed class SystemHelper
{
private SystemHelper() { }
/// <summary>
/// 設(shè)置程序開機啟動
/// </summary>
/// <param name="strAppPath">應(yīng)用程序exe所在文件夾</param>
/// <param name="strAppName">應(yīng)用程序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("應(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>
/// 判斷是否開機啟動
/// </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)用方法:
/// <summary>
/// 設(shè)置程序開機自啟動
/// </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è)置開機啟動就是如此簡單。
【開機啟動并運行】
那這個就不用說了,將命令行參數(shù)和開機注冊表操作結(jié)合起來就可以了。
示例代碼:
/// <summary>
/// 檢查是否開機啟動,并設(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 = "我是開機自啟動運行...";
}
}
}總結(jié)
以上所述是小編給大家介紹的C# winform程序?qū)崿F(xiàn)開機自啟動并且識別是開機啟動還是雙擊啟動,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
網(wǎng)頁名稱:C#winform程序?qū)崿F(xiàn)開機自啟動并且識別是開機啟動還是雙擊啟動
網(wǎng)頁路徑:http://www.yijiale78.com/article12/gjhddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、電子商務(wù)、手機網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)