標籤:
今天看到有人在問用代碼執行CMD命令的問題,就總結一下用法,也算做個備忘。
Delphi中,執行命令或者運行一個程式有2個函數,一個是winexec,一個是shellexecute。這兩個大家應該都見過,其中,winexec比較簡單,可以直接運行一個外部程式,shellexecute則更進階一些,除了可以運行外部exe,還可以執行特殊命令。
下面我們就分別舉例子說明:我們先來看看運行一個exe程式,以記事本為例:
WinExec(PChar(‘ notepad .exe‘),SW_NORMAL);//正常模式開啟
WinExec(PChar(‘ notepad .exe‘),SW_HIDE);//隱藏方式開啟
WinExec(PChar(‘notepad.exe‘),SW_SHOWMAXIMIZED);//最大化方式開啟,軟體必須支援最大化運行,否則該參數無效,以NORMAL方式運行
WinExec(PChar(‘notepad.exe‘),SW_SHOWMINIMIZED);//最小化方式開啟
Shellexecute(handle,nil,‘notepad.exe‘,nil,nil,sw_normal);//這個是用shellexecute的方式開啟,注意最後一個參數,和上面一樣
使用Shellexecute注意需要uses ShellApi,上面的記事本,因為是在系統目錄下,所以可以直接寫notepad.exe檔案名稱,而不必寫路徑,如果是其他非環境變數中註冊的exe,則需要帶上絕對路徑或者相對路徑
好,上面是最簡單的,下面我們來說說帶參數的運行,大家知道,有些exe程式在啟動並執行時候可以附加參數,這裡以cmd為例說明
比如,我想運行ping命令,去執行ping 192.168.1.1
WinExec(PChar( ‘cmd.exe /c ping 192.168.1.1‘),SW_SHOWNORMAL);
shellexecute(handle,nil,‘cmd.exe‘,pchar(‘/c ping 192.168.1.1‘),nil,sw_normal);
注意,cmd的命令需要是用/c表示帶參數運行,然後後面跟上具體命令,這樣就可以執行ping命令了。
上面的命令的確可以成功運行,但是有個缺點,那就是cmd在執行完畢後就會自動關閉視窗,如果有時候命令執行的過快,我們根本看不清結果,那麼,有什麼辦法可以讓cmd在執行完畢後不關閉視窗呢?答案是肯定的,我們需要一個額外的命令pause
WinExec(PChar( ‘cmd.exe /c ping 192.168.1.1 & pause‘),SW_SHOWNORMAL);
我們注意紅色部分,我們使用一個&符號和pause,pause是批處理中的暫停命令,&符號則表示可以執行多個命令,上面的例子就表明,在執行完ping命令後再執行pause命令,這樣,視窗就不會關閉了。shellexecute同樣支援該方法。
下面,我們看看shellexecute其他的一些方法:
開啟網頁:這個太簡單了,大家應該都知道
ShellExecute(handle, ‘open‘, PChar(‘http://www.baidu.com‘), nil, nil, SW_SHOWNORMAL);//使用預設瀏覽器開啟baidu.com
ShellExecute(handle, ‘open‘, ‘firefox.exe‘,PChar(‘http://www.baidu.com‘),nil, SW_SHOWNORMAL);//使用Firefox瀏覽器開啟baidu.com
當然,shellexecute還支援在系統中註冊過的關聯命令。比如發郵件
ShellExecute(handle, ‘open‘,PChar(‘mailto:[email protected]‘),nil,nil, SW_SHOWNORMAL);
執行這句就可以開啟預設郵件用戶端給[email protected]發郵件了,如果我們想帶上主題和內容也很好辦:
ShellExecute(handle, ‘open‘,PChar(‘mailto:[email protected]?subject=這是郵件主題&[email protected]&body=郵件內文‘),nil,nil, SW_SHOWNORMAL);
上面的就可以自動填寫主題,內容和抄送了,注意,中文需要編碼,否則可能出現亂碼。
[轉]Delphi執行CMD命令