XE版本 執行cmd命令,並取得輸出字元

2021-07-26 21:32:42 字數 1831 閱讀 8747

procedure checkresult(b: boolean);

begin

if not b then

raise exception.create(syserrormessage(getlasterror));

end;

function rundos(const commandline: string): string;

var hread, hwrite: thandle;

startinfo: tstartupinfoa;

proceinfo: tprocessinformation;

b: boolean;

sa: tsecurityattributes;

ins: thandlestream;

sret: tstrings;

begin

result := '';

fillchar(sa, sizeof(sa), 0);

// 設定允許繼承,否則在nt和2000下無法取得輸出結果

sa.nlength := sizeof(sa);

sa.binherithandle := true;

sa.lpsecuritydescriptor := nil;

b := createpipe(hread, hwrite, @sa, 0);

checkresult(b);

fillchar(startinfo, sizeof(startinfo), 0);

startinfo.cb := sizeof(startinfo);

startinfo.wshowwindow := sw_hide;

// 使用指定的控制代碼作為標準輸入輸出的檔案控制代碼,使用指定的顯示方式

startinfo.dwflags := startf_usestdhandles or startf_useshowwindow;

startinfo.hstderror := hwrite;

startinfo.hstdinput := getstdhandle(std_input_handle); // hread;

startinfo.hstdoutput := hwrite;

pansichar(ansistring(commandline)), // lpcommandline: pansichar

nil, // lpprocessattributes: psecurityattributes

nil, // lpthreadattributes: psecurityattributes

true, // binherithandles: bool

create_new_console, nil, nil, startinfo, proceinfo);

checkresult(b);

waitforsingleobject(proceinfo.hprocess, infinite);

ins := thandlestream.create(hread);

if ins.size > 0 then

begin

sret := tstringlist.create;

sret.loadfromstream(ins);

result := sret.text;

sret.free;

end;

ins.free;

closehandle(hread);

closehandle(hwrite);

end;

測試memo1.text := rundos('ping www.baidu.com');  

C語言執行cmd命令並獲取執行結果

優點 跨平台 缺點 windows下呼叫時會閃出控制台視窗 include include brief 使用popen呼叫終端並獲取執行結果 param in cmd 命令內容 param out result 儲存結果的位址 return 0或1 執行狀態,失敗或成功 int exec cmd c...

使用bat指令碼自動開啟cmd並執行命令

這三步是對命令拆分後的講解 第一步 開啟cmd命令 cmd第二步 進入到指定資料夾命令 進度d盤根目錄 cmd k cd d d 進度d盤下ffmpeg資料夾 cmd k cd d d ffmpeg 第三步 執行dos命令 注意 指代dos命令 cmd k cd d d ffmpeg bin 執行d...

C語言使用cmd命令並獲取輸出方法

在實踐中,我們有時候需要用c語言來呼叫cmd的命令,並得到執行的結果,這裡給出乙個簡單的例子。include 描述 execmd函式執行命令,並將結果儲存到result字串陣列中 引數 cmd表示要執行的命令 result是執行的結果儲存的字串陣列 函式執行成功返回1,失敗返回0 int execm...