1. 程式人生 > >C#_WinForm接收命令列引數

C#_WinForm接收命令列引數

首先,我要仔細的宣告下,本文講的是接受命令列引數,讓程式啟動。而不是啟動那個黑黑的框。。。我要實現的效果和它麼有關係

網上那些千篇一律,只管Ctrl+C,Ctrl+V,採集來的文章,本人已經深受其害,浪費了不少時間!BS~~

image

先看下這篇文章:Winform程式接收命令列引數。一看標題,恩…和我的想法一樣,不過一看內容,大為失望。不過呢,這裡既然出現了2個API函式,先測試下,收藏著。

/// <summary>
/// 啟動控制檯
/// </summary>
/// <returns></returns>
[DllImport("kernel32.dll")]
public static extern bool AllocConsole(); /// <summary> /// 釋放(關閉)控制檯 /// </summary> /// <returns></returns> [DllImport("kernel32.dll")] public static extern bool FreeConsole();

在WinForm中呼叫黑框(控制檯),就可以用此來實現。具體的使用…自己實踐吧…

現在說正題,說明下我要實現的功能:

舉個例子,在cmd.exe下,我們輸入shutdown,這個命令可以用來重啟系統,關閉系統,等等。它有一系列的引數可選:

image

我們可以在C:\Windows\System32\下找到shutdown.exe這個Exe可執行檔案。這個程式接受命令列引數,當引數符合一個內建引數時,執行某個操作。

我們就是要實現這種功能!這樣的程式可以在任何一個專案中使用,通過System.Diagnostics.Process.Start("你的程式.exe 引數1")。

一般情況下,每個專案都有一個Main函式,它是整個程式的入口點,那麼引數也肯定在這裡被傳遞!

預設的Main函式:

/// <summary>
/// 應用程式的主入口點。
/// </summary>
[STAThread]
static void 
Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }

我們只需改成這樣:

/// <summary>
/// 應用程式的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (args.Length == 0)
        Application.Run(new Form1());
    else
        Application.Run(new Form1(args));
}

Form1窗體的構造:

string[] args=null;
public Form1()
{
    InitializeComponent();
}
public Form1(string[] args)
{
    InitializeComponent();
    this.args = args;
}

真的是很簡單很簡單的幾行程式碼。。。我們有了args引數,剩下的程式碼。。。看你的需求咯。