請問一下我用CreateProcess來執行PING的指令要如何及時輸出? |
答題得分者是:Stallion
|
aki0921
一般會員 發表:13 回覆:11 積分:14 註冊:2007-12-12 發送簡訊給我 |
各位大大想請問一個問題<就是我用 "cmd.exe /c ping 192.168.0.1 > test.txt"
可以將結果存入test.txt ,如下: Reply from 192.168.0.1 bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 但是我想要像CMD一樣會一個一個出來要怎麼做內? |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
是這樣嗎?!
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Edit1->Text = "www.hinet.net"; AnsiString fn = "test.txt "; AnsiString s = "ping " Edit1->Text " > " fn; system(s.c_str()); ListBox1->Items->LoadFromFile(fn); } //--------------------------------------------------------------------------- ===================引 用 aki0921 文 章=================== 各位大大想請問一個問題<就是我用 "cmd.exe /c ping 192.168.0.1 > test.txt" 可以將結果存入test.txt ,如下: Reply from 192.168.0.1 bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 Reply from 192.168.0.1 : bytes=32 time<1ms TTL=128 但是我想要像CMD一樣會一個一個出來要怎麼做內?
編輯記錄
jow 重新編輯於 2007-12-12 19:59:56, 註解 無‧
|
aki0921
一般會員 發表:13 回覆:11 積分:14 註冊:2007-12-12 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
以下為轉貼資料,忘了在那個網站裡面收錄的! 沒有試過,請參考~。
[code cpp] //用管道實現dos命令無視窗. //有時候在程式中要執行dos命令,而用ShellExecute網網會彈出cmd視窗,十分不爽,用管道實現這個功能其實也挺簡單的.下面就是一個簡單的程式. //程式主要用了幾個函數CreatePipe,CreateProcess,其他的就是幾個結構,msdn都有說明比較簡單. AnsiString __fastcall TForm1::DosCommand(AnsiString sCmdline); #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::DosCommand(AnsiString sCmdline) { PROCESS_INFORMATION proc = {0}; //關於進程資訊的一個結構 long ret; bool sPipe; STARTUPINFO start = {0}; SECURITY_ATTRIBUTES sa = {0}; HANDLE hReadPipe ; HANDLE hWritePipe; AnsiString sOutput; AnsiString sBuffer; unsigned long lngBytesRead; char cBuffer[256]; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor=0; sa.bInheritHandle = TRUE; sPipe=::CreatePipe(&hReadPipe, &hWritePipe,&sa, 0); //創建管道 if (!sPipe) { sOutput="CreatePipe failed. Error: " AnsiString(GetLastError()); Memo1->Lines->Add(sOutput); return sOutput; } start.cb = sizeof(STARTUPINFOA); start.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; start.hStdOutput = hWritePipe; start.hStdError = hWritePipe; start.wShowWindow = SW_HIDE; sBuffer = sCmdline; ret =::CreateProcess(0, sBuffer.c_str(), &sa, &sa, TRUE, NORMAL_PRIORITY_CLASS, 0, 0, &start, &proc); if (ret == 0) { sOutput="Bad command or filename"; Memo1->Lines->Add(sOutput); return sOutput; } ::CloseHandle(hWritePipe); do { memset(cBuffer,'\0',sizeof(cBuffer)); ret = ::ReadFile(hReadPipe, &cBuffer, 255, &lngBytesRead, 0); sBuffer=StrPas(cBuffer); sOutput = sOutput sBuffer; Memo1->Lines->Add(sBuffer); Application->ProcessMessages(); } while (ret != 0 ); ::CloseHandle(proc.hProcess); ::CloseHandle(proc.hThread); ::CloseHandle(hReadPipe); return sOutput; } //----------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { DosCommand(Edit1->Text);//Edit1->Text就是你要輸入的dos命令.例如ping 192.168.0.1 } |
aki0921
一般會員 發表:13 回覆:11 積分:14 註冊:2007-12-12 發送簡訊給我 |
才可以執行, 謝謝板大提供得資料^^ 不過,我想請問一下,就是我用ping得ping失敗他會一行一行的秀出來 但是我要是亂打一個指令, 例如:我在CMD打入"pinh 10.1.1.1" 他會秀出: 'pinh' 不是內部或外部命令 可執行的程式或批次檔。 或是我打入 "telnet 10.1.1.1" 他會秀出: 正連線到 10.1.1.1... 再來秀出: 無法開啟到主機的連線, 在連接埠 23: 連線失敗 可是我在程式中,打入都不會出現這些字眼,請問要如何顯示內? [code cpp] if (!sPipe) { sOutput="CreatePipe failed. Error: " AnsiString(GetLastError()); Memo1->Lines->Add(sOutput); return sOutput; }//是不是要更改這段程式? [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |