用過C語言編程的人都知道,在DOS下的編程可以通過main函數的參數取得命令列參數的個數以及每個參數的字串,例如
int main(int argv ,char *argv[])
{
…
}
則命令列參數是argc個,這些參數分別儲存在argv[0]~argv[argc-1]中,其中argv[0]是可執行檔的名字(含路徑),那麼Windows程式是怎麼取得命令列參數的呢?用C語言寫過windows程式的人都知道,在windows程式的主函數WinMain()中,有一個參數lpszCmd,這個參數就是命令列參數。但我們在windows編程時一般都沒在WinMain()函數工作,再加上lpszCmd是整個命令列,要取得每個參數使用也不方便,有沒有更好的方法呢?
如果你是使用的C++Builder編程,那麼我就恭喜你,在C++Builder中用使用命令列參數是非常簡單。C++Builder定義了三個全域變數和函數CmdLine、ParamStr()、ParamCount(),有了這三個變數和函數,就可以非常方便地使用命令列參數了,首先我們來看一下這幾個函數和變數的定義:
extern PACKAGE char *CmdLine;
extern PACKAGE AnsiString __fastcall ParamStr(int Index);
extern PACKAGE int __fastcall ParamCount(void);
CmdLine和WinMain()的參數lpszCmd是一樣的,也就是整個命令列參數;ParamCount()用來取得命令列參數的個數,但不包括可執行檔名,也就是相當於DOS下的argc-1,ParamSter()用來取得每一個命令列參數的值,ParamStr(0)就是可執行檔名,實際的參數就是ParamStr(1)~ParamStr(ParamCount())。下面就以一個例子來說明這三個函數變數的使用。
在表單上放置一個Label,用來顯示總的命令列參數;再加入一個ListBox,用來顯示每個參數,然後在表單的onCreate事件中加入以下代碼:
Label1->Caption=CmdLine;
for(int i=0;i<=ParamCount();i++)
ListBox1->Items->Add(ParamStr(i));
然後在菜單Run->Parameters…中修改命令列參數,然後運行程式……怎麼樣?夠簡單的吧!