利用VB的Shell執行PING命令,將PING的輸出重定向到文件 c:\r.txt,然後讀取c:\r.txt文件顯示運行結果。
由於VB中的Shell命令是異步執行的,即調用Shell後,沒等Shell執行完畢,程序就繼續執行下壹條語句。為此,程序使用了系統API來判斷Shell是否結束。
1)窗體及控件
2)代碼
Option?ExplicitPrivate?Declare?Function?GetExitCodeProcess?Lib?"kernel32"?(?_
ByVal?hProcess?As?Long,?_
lpExitCode?As?Long)?As?Long
Private?Declare?Function?CloseHandle?Lib?"kernel32"?(?_
ByVal?hObject?As?Long)?As?Long
Private?Declare?Function?OpenProcess?Lib?"kernel32"?(?_
ByVal?dwDesiredAccess?As?Long,?_
ByVal?bInheritHandle?As?Long,?_
ByVal?dwProcessId?As?Long)?As?Long
Const?PROCESS_QUERY_INFORMATION?=?&H400
Const?STILL_ALIVE?=?&H103
Private?Sub?Command1_Click()
If?Trim(Text1.Text)?=?""?Then
MsgBox?"請輸入域名或IP地址",?vbInformation?+?vbOKOnly
Text1.SetFocus
Exit?Sub
End?If
'命令執行期間禁用命令按鈕
Command1.Enabled?=?False
'調用Shell執行Ping,執行結果重定向到C:\r.txt中
Dim?pid?As?Long
pid?=?Shell("cmd.exe?/C?Ping?"?&?Text1.Text?&?"?>?c:\r.txt",?vbHide)
'?提示
Text2.Text?=?"正在執行Ping?"?&?Text1.Text?&?"?..."
'等待Shell執行結束
Dim?hProc?As?Long
hProc?=?OpenProcess(PROCESS_QUERY_INFORMATION,?0,?pid)
Dim?ExitCode?As?Long
Do
Call?GetExitCodeProcess(hProc,?ExitCode)
DoEvents
Loop?While?ExitCode?=?STILL_ALIVE
'清空,準備顯示結果
Text2.Text?=?""
'打開?C:\r.txt文件
Open?"c:\r.txt"?For?Input?As?#1
Dim?strLine?As?String
Do?Until?EOF(1)
Line?Input?#1,?strLine
'顯示執行結果
Text2.Text?=?Text2.Text?&?strLine?&?vbNewLine
Loop
'關閉文件
Close?#1
'刪除C:\r.txt
On?Error?Resume?Next
Kill?"c:\r.txt"
On?Error?GoTo?0
'使能命令按鈕
Command1.Enabled?=?True
End?Sub
Private?Sub?Form_Load()
Text1.Text?=?""
Text2.Text?=?""
End?Sub
3)運行結果
Ping baidu.com 正在執行中 ....
Ping baidu.com執行結果