請問如何得知運行了msdos指令後的result? |
缺席
|
windham
一般會員 發表:15 回覆:22 積分:7 註冊:2006-07-28 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
1. 建立 Pipe
2. 指定給 Dos 視窗 3. 執行 Dos 程式 4. 由 Pipe 取得結果 1. 開啟 Dos 視窗 2. 記錄 Buf Handle (有兩種,一為輸入,一為輸出) 3. 執行指令 4. 由 取得的 Handle 到 Buf 去讀結果 請查 MS API ,關鍵字 PIPE 與 GetStdHandle(STD_OUTPUT_HANDLE); ===================引 用 windham 文 章=================== 請問如何得知運行了msdos指令後的result? 好像運行dir..... Winexec(PChar('dir'),SW_SHOW); 這樣..... 但它是 cardinal....... 那如何得知他的結果呢>< |
windham
一般會員 發表:15 回覆:22 積分:7 註冊:2006-07-28 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
暗黑破壞神版主提出的方法只能抓到 STDOUT 抓不到 STDERR
不然可以試試: DIR "C:\不存在的目錄" > C:\DIR.TXT 在 C:\DIR.TXT 中不會有 "找不到檔案" 這一行訊息,而這一行訊息會出現在 CMD 視窗中 要把 STDERR 一起抓到要這樣用 DIR "C:\不存在的目錄" 1>C:\DIR.TXT 2>&1 或是可以簡化成 DIR "C:\不存在的目錄" >C:\DIR.TXT 2>&1 1>C:\DIR.TXT 當中的 1 表示 STDOUT,這表示要把 STDOUT 重導至 C:\DIR.TXT 2>&1 當中的 2 表示 STDERR,&1 表示第一個使用者自訂的輸入輸出,在這裡指的就是 C:\DIR.TXT ===================引 用 暗黑破壞神 文 章=================== 你可以試試 dir > filename 這種方法去試。
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
之前答覆別人所寫的。
[code delphi] procedure TForm1.Button1Click(Sender: TObject); const CmdLine = 'cmd /c ipconfig'; var hReadPipe,hWritePipe :THandle; lStartupInfo: TStartupInfo; lProcessInfo: TProcessInformation; lSecAttr : TSecurityAttributes; dwAvail,dwRead : DWORD; Buffer : String; begin lSecAttr.nLength :=Sizeof(TSecurityAttributes); lSecAttr.lpSecurityDescriptor := Nil; lSecAttr.bInheritHandle :=True; if CreatePipe(hReadPipe,hWritePipe,@lSecAttr,0) then Try FillChar(lStartupInfo, SizeOf(TStartupInfo), #0); lStartupInfo.cb := SizeOf(TStartupInfo); lStartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; lStartupInfo.wShowWindow := SW_HIDE; lStartupInfo.hStdOutput := hWritePipe; lStartupInfo.hStdError := hWritePipe; if CreateProcess(nil, PChar(CmdLine), nil, nil, True, NORMAL_PRIORITY_CLASS ,nil, Nil , lStartupInfo, lProcessInfo) then Try WaitForSingleObject(lProcessInfo.hProcess, INFINITE); if PeekNamedPipe(hReadPipe, nil, 0, nil, @dwAvail, nil) then begin SetLength(Buffer, dwAvail); ReadFile(hReadPipe, Pointer(Buffer)^, dwAvail, dwRead, nil); Memo1.Lines.Add(Buffer); end; Finally CloseHandle(lProcessInfo.hThread); CloseHandle(lProcessInfo.hProcess); end; Finally CloseHandle(hReadPipe); CloseHandle(hWritePipe); end; end; [/code] |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
呵。我當然知道。
只是我想。開個頭給他有學習跟成長的空間。 都像 textbook 都說完了。那有什麼好玩的? 我在等他回應你說的這個問題。 還在等他回應檔名會重複,要怎麼用 temp file name 的方法。 這一串的解法,要是全寫給他。那就不好玩了。 好玩就是看著他成長。 如果只是寫寫程式。給他抄。看不到他學習的成長。 那乾脆去寫外包案算了。 ===================引 用 sryang 文 章=================== 暗黑破壞神版主提出的方法只能抓到 STDOUT 抓不到 STDERR 不然可以試試: DIR "C:\不存在的目錄" > C:\DIR.TXT 在 C:\DIR.TXT 中不會有 "找不到檔案" 這一行訊息,而這一行訊息會出現在 CMD 視窗中 要把 STDERR 一起抓到要這樣用 DIR "C:\不存在的目錄" 1>C:\DIR.TXT 2>&1 或是可以簡化成 DIR "C:\不存在的目錄" >C:\DIR.TXT 2>&1 1>C:\DIR.TXT 當中的 1 表示 STDOUT,這表示要把 STDOUT 重導至 C:\DIR.TXT 2>&1 當中的 2 表示 STDERR,&1 表示第一個使用者自訂的輸入輸出,在這裡指的就是 C:\DIR.TXT |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
版主真是用心良苦啊!小的受教了!
===================引 用 暗黑破壞神 文 章=================== 呵。我當然知道。 只是我想。開個頭給他有學習跟成長的空間。 都像 textbook 都說完了。那有什麼好玩的? 我在等他回應你說的這個問題。 還在等他回應檔名會重複,要怎麼用 temp file name 的方法。 這一串的解法,要是全寫給他。那就不好玩了。 好玩就是看著他成長。 如果只是寫寫程式。給他抄。看不到他學習的成長。 那乾脆去寫外包案算了。
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
windham
一般會員 發表:15 回覆:22 積分:7 註冊:2006-07-28 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
使用 Dos 轉向,確實是方法之一,但是 DOS 未來還會不會被支援,是一個問題
另外 API 其實是很方便的東西,不過有十不甚好用,但比要自己來,還是好一點 不愛 API 的朋友可以自己寫函式,酷一點的可以用組語 反正達成目的就是 然而效率要兼顧 記得那時,我的老闆 (怒)跟我說,你要堅持用 DOS 轉向,那,你論文就不用寫了 所以我 (膽寒),.....不敢用 ===================引 用 sryang 文 章=================== 暗黑破壞神版主提出的方法只能抓到 STDOUT 抓不到 STDERR 不然可以試試: DIR "C:\不存在的目錄" > C:\DIR.TXT 在 C:\DIR.TXT 中不會有 "找不到檔案" 這一行訊息,而這一行訊息會出現在 CMD 視窗中 要把 STDERR 一起抓到要這樣用 DIR "C:\不存在的目錄" 1>C:\DIR.TXT 2>&1 或是可以簡化成 DIR "C:\不存在的目錄" >C:\DIR.TXT 2>&1 1>C:\DIR.TXT 當中的 1 表示 STDOUT,這表示要把 STDOUT 重導至 C:\DIR.TXT 2>&1 當中的 2 表示 STDERR,&1 表示第一個使用者自訂的輸入輸出,在這裡指的就是 C:\DIR.TXT ===================引 用 暗黑破壞神 文 章=================== 你可以試試 dir > filename 這種方法去試。 |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
這也是令人無奈的事
但是,確實為了「鐘點費」而上課的大有人在,更不用說,有一堆學經歷都很好的,想賺這種鐘點費,還不得其門而入 要一個碩士講師,來百來位博士 要是心情好,還可以跟學生說「老師很歡你,你較多留一年吧」,就這樣論文多了一年時間可以寫,悲""" 更不用說,要是爽到極點,還可以說「你可以重考了,我不會讓你輕鬆畢業的,起碼拖個7 年」 現在「熱血」的老師,少了,會衝的老師,不多 學生的功用: 1. 開課賺鐘點 2. 給作業研究,衝論文,拼升等 3. 顧小孩,送泳褲、搬家、看車、樣樣來 就是少聽學生說了什麼 還好,我的老闆只是要求效率,不准我用 DOS,以上三點沒發生在我身上,好哩家在 也好在念的是國立,老師不用拼鐘點 (才知道國立比私立好太多,補助之類) ===================引 用 暗黑破壞神 文 章=================== 記得我也跟那些個老師說過,你要是什麼都要自己來,那你就不要開所謂的物件導向的課了。 講的是一回事,做是一回事,為了你的鐘點費而上課嗎? ===================引 用 syntax 文 章=================== 記得那時,我的老闆 (怒)跟我說,你要堅持用 DOS 轉向,那,你論文就不用寫了 所以我 (膽寒),.....不敢用 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |