在VB中调用DOS命令,如何得知DOS命令是否已经执行完毕_____________________________________________
Set wshl = CreateObject("wscript.shell")wshl.Run "ping 9zp.com", 1, True 'true代表等待完成,1代表显示运行窗口MsgBox "完成"******************************************
[名称] 如何建立控制台窗口
[数据来源] 未知
[保存时间] 2002-06-18
[内容简介] 空
[源代码内容]
如何建立控制台窗口以及让用户在其中输入字符同计算机进行交互对话。 首先在选VB菜单中的 Project | Module 项向工程文件中加入一个模块,然后在这个Module中加入以下代码:
Option Explicit
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function GetStdHandle Lib "kernel32" _(ByVal nStdHandle As Long) As Long
Private Declare Function ReadConsole Lib "kernel32" Alias _"ReadConsoleA" (ByVal hConsoleInput As Long, _ByVal lpBuffer As String, ByVal nNumberOfCharsToRead As Long, _lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private Declare Function SetConsoleMode Lib "kernel32" (ByVal _hConsoleOutput As Long, dwMode As Long) As Long
Private Declare Function SetConsoleTextAttribute Lib _"kernel32" (ByVal hConsoleOutput As Long, ByVal _wAttributes As Long) As Long
Private Declare Function SetConsoleTitle Lib "kernel32" Alias _"SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias _"WriteConsoleA" (ByVal hConsoleOutput As Long, _ByVal lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, _lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
Private Const STD_INPUT_HANDLE = -10&Private Const STD_OUTPUT_HANDLE = -11&Private Const STD_ERROR_HANDLE = -12&
Private Const FOREGROUND_BLUE = &H1Private Const FOREGROUND_GREEN = &H2Private Const FOREGROUND_RED = &H4Private Const FOREGROUND_INTENSITY = &H8Private Const BACKGROUND_BLUE = &H10Private Const BACKGROUND_GREEN = &H20Private Const BACKGROUND_RED = &H40Private Const BACKGROUND_INTENSITY = &H80
'For SetConsoleMode (input)Private Const ENABLE_LINE_INPUT = &H2Private Const ENABLE_ECHO_INPUT = &H4Private Const ENABLE_MOUSE_INPUT = &H10Private Const ENABLE_PROCESSED_INPUT = &H1Private Const ENABLE_WINDOW_INPUT = &H8'For SetConsoleMode (output)Private Const ENABLE_PROCESSED_OUTPUT = &H1Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2
'''''G L O B A L S'''''''''''''''''''''''''''''''''''Private hConsoleIn As Long ' The console's input handlePrivate hConsoleOut As Long ' The console's output handlePrivate hConsoleErr As Long ' The console's error handle
'''''M A I N'''''''''''''''''''''''''''''''''''''''''Private Sub Main() Dim szUserInput As String
AllocConsole '建立一个控制台窗口 SetConsoleTitle "VB Console Example" '设置窗口标题
'获得控制窗口的句柄 hConsoleIn = GetStdHandle(STD_INPUT_HANDLE) hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE) hConsoleErr = GetStdHandle(STD_ERROR_HANDLE)
SetConsoleTextAttribute hConsoleOut, _ FOREGROUND_RED Or FOREGROUND_GREEN _ Or FOREGROUND_BLUE Or FOREGROUND_INTENSITY _ Or BACKGROUND_BLUE
ConsolePrint "VB Console Example" & vbCrLf SetConsoleTextAttribute hConsoleOut, _ FOREGROUND_RED Or FOREGROUND_GREEN _ Or FOREGROUND_BLUE ConsolePrint "Please Enter Your Name Here--> "
'获得用户名 szUserInput = ConsoleRead() If Not szUserInput = vbNullString Then ConsolePrint "Hello, " & szUserInput & "!" & vbCrLf Else ConsolePrint "Hello,But who are you?" & vbCrLf End If
ConsolePrint "Press Enter To Close The Console" Call ConsoleRead
FreeConsole ' Destroy the consoleEnd Sub
Private Sub ConsolePrint(szOut As String) WriteConsole hConsoleOut, szOut, Len(szOut), vbNull, vbNullEnd Sub
Private Function ConsoleRead() As String Dim sUserInput As String * 256 Call ReadConsole(hConsoleIn, sUserInput, Len(sUserInput), vbNull, vbNull) 'Trim off the NULL charactors and the CRLF. ConsoleRead = Left$(sUserInput, InStr(sUserInput, Chr$(0)) - 3)End Function 选VB菜单中的 Project | Project1 Properties项,将Startup Object改变为Sub Main,然后运行程序,程序就会弹出一个控制台窗口,用户可以根据控制台窗口中的提示信息与程序进行交互对话。
http://community.csdn.net/Expert/topic/4377/4377306.xml?temp=.4533197
'应该是Shell的命令程序没执行完,就执行显示文件到TEXTBox的操作了,使用WaitForSingleObject来等待Shell执行完后再执行下面操作'先申明如下APIPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongPrivate Const SYNCHRONIZE = &H100000Private Const INFINITE = &HFFFFFFFF
'调用如下Dim pId As Long, pHnd As LongpId = Shell(要执行的应用程序)pHnd = OpenProcess(SYNCHRONIZE, 0, pId)If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) '执行你读取文件到TextBox的操作 ..................else msgbox "调用失败"End If
