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,則需要帶上絕對路徑或者相對路徑
比如,我想執行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(''), nil, nil, sw_shownormal);//使用預設瀏覽器開啟baidu.com
shellexecute(handle, 'open', 'firefox.exe',pchar(''),nil, sw_shownormal);//使用火狐瀏覽器開啟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);
上面的就可以自動填寫主題,內容和抄送了,注意,中文需要編碼,否則可能出現亂碼。 cmd 執行命令
一 一鍵開啟執行 開啟 執行 視窗,都是通過 開始 選單中的命令來完成的。其實我們可以為執行建立乙個快捷方式,一鍵開啟執行視窗。右擊桌面上的快捷方式,開啟屬性視窗。切換到 快捷鍵 方式選項卡,在 快捷鍵 裡面輸入乙個按鍵,然後單擊 確定 按鈕,這樣我們要開啟執行視窗時只需要按下該快捷鍵即可。二 快速...
執行linux命令,cmd命令
exec dir output print r output exec 函式解析 exec 語法 string exec string command,string array int return var exec 返回值 字串 exec 引數說明 command 需要執行的命令 array 是輸...
qt執行cmd命令
執行 route ipconfig 肯定沒問題 copy code qprocess p 0 p.start route p.waitforstarted p.waitforfinished qdebug qprocess p 0 p.start ipconfig p.waitforstarted ...