全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2323
推到 Plurk!
推到 Facebook!

請問如何得知運行了msdos指令後的result?

缺席
windham
一般會員


發表:15
回覆:22
積分:7
註冊:2006-07-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-24 23:49:13 IP:218.102.xxx.xxx 訂閱
請問如何得知運行了msdos指令後的result?
好像運行dir.....
Winexec(PChar('dir'),SW_SHOW);
這樣.....
但它是 cardinal.......
那如何得知他的結果呢><
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-25 06:06:56 IP:61.64.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-26 05:32:29 IP:218.102.xxx.xxx 訂閱
可否不用api的呢?
api有點麻煩似的 @@
還有....中秋節快樂^^"
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-26 09:58:07 IP:61.64.xxx.xxx 訂閱
有,自己分析螢幕
1. 先抓出視窗
2. 寫個 ORC

或是自己寫個 DOS 執行介面

===================引 用 windham 文 章===================
可否不用api的呢?
api有點麻煩似的 @@
還有....中秋節快樂^^"
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-09-26 11:06:16 IP:211.77.xxx.xxx 未訂閱
你可以試試 dir > filename
這種方法去試。
===================引 用 windham 文 章===================
請問如何得知運行了msdos指令後的result?
好像運行dir.....
Winexec(PChar('dir'),SW_SHOW);
這樣.....
但它是 cardinal.......
那如何得知他的結果呢><
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-26 13:12:54 IP:59.125.xxx.xxx 訂閱
暗黑破壞神版主提出的方法只能抓到 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-26 13:37:04 IP:61.222.xxx.xxx 訂閱
之前答覆別人所寫的。

[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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-09-26 13:44:19 IP:211.77.xxx.xxx 未訂閱
呵。我當然知道。
只是我想。開個頭給他有學習跟成長的空間。
都像 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-09-26 14:02:24 IP:59.125.xxx.xxx 訂閱
版主真是用心良苦啊!小的受教了!

===================引 用 暗黑破壞神 文 章===================
呵。我當然知道。
只是我想。開個頭給他有學習跟成長的空間。
都像 textbook 都說完了。那有什麼好玩的?
我在等他回應你說的這個問題。
還在等他回應檔名會重複,要怎麼用 temp file name 的方法。
這一串的解法,要是全寫給他。那就不好玩了。
好玩就是看著他成長。
如果只是寫寫程式。給他抄。看不到他學習的成長。
那乾脆去寫外包案算了。
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
windham
一般會員


發表:15
回覆:22
積分:7
註冊:2006-07-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-09-26 20:28:00 IP:218.102.xxx.xxx 訂閱
做cmd 的 output出來 就會有個txt檔出現了......
好像 ping google.com>log.txt對吧......
但這樣好像要產生檔案喔........
delphi有內建的func可以做到好像perl php 那些的
s=system('dir') 這樣嗎
===================引 用 暗黑破壞神 文 章===================
你可以試試 dir > filename
這種方法去試。
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-10-06 08:24:38 IP:61.64.xxx.xxx 訂閱
使用 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-10-06 08:30:07 IP:218.170.xxx.xxx 未訂閱
記得我也跟那些個老師說過,你要是什麼都要自己來,那你就不要開所謂的物件導向的課了。
講的是一回事,做是一回事,為了你的鐘點費而上課嗎?

===================引 用 syntax 文 章===================
記得那時,我的老闆 (怒)跟我說,你要堅持用 DOS 轉向,那,你論文就不用寫了
所以我 (膽寒),.....不敢用
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-10-08 14:49:26 IP:61.64.xxx.xxx 訂閱
這也是令人無奈的事
但是,確實為了「鐘點費」而上課的大有人在,更不用說,有一堆學經歷都很好的,想賺這種鐘點費,還不得其門而入
要一個碩士講師,來百來位博士
要是心情好,還可以跟學生說「老師很歡你,你較多留一年吧」,就這樣論文多了一年時間可以寫,悲"""
更不用說,要是爽到極點,還可以說「你可以重考了,我不會讓你輕鬆畢業的,起碼拖個7 年」

現在「熱血」的老師,少了,會衝的老師,不多
學生的功用:
1. 開課賺鐘點
2. 給作業研究,衝論文,拼升等
3. 顧小孩,送泳褲、搬家、看車、樣樣來
就是少聽學生說了什麼

還好,我的老闆只是要求效率,不准我用 DOS,以上三點沒發生在我身上,好哩家在
也好在念的是國立,老師不用拼鐘點 (才知道國立比私立好太多,補助之類)

===================引 用 暗黑破壞神 文 章===================
記得我也跟那些個老師說過,你要是什麼都要自己來,那你就不要開所謂的物件導向的課了。
講的是一回事,做是一回事,為了你的鐘點費而上課嗎?

===================引 用 syntax 文 章===================
記得那時,我的老闆 (怒)跟我說,你要堅持用 DOS 轉向,那,你論文就不用寫了
所以我 (膽寒),.....不敢用
系統時間:2024-05-04 5:39:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!