楼上的各位,你们都理解错了楼主的意思,他并不是要用VB程序来运行其它的命令,而是要用VB来制作一个控制台程序! cmd的学名就叫做控制台,一般用VB做的程序默认是GUI(图形用户界面)的,而楼主想做一个在控制台中运行的文字用户界面程序 不过我十分奇怪楼主为什么刻意要用VB做,C/C++不是更好吗?用C/C++默认做出来的程序就是控制台的,用VB将极其麻烦,要调用很多Windows API函数 ---------------------------------------- 下面我给出一个例子,运行它就会在控制台(就是你说的cmd)里面打出What''s your name?在光标后输入名字后回车,如果没输入名字将显示You don''t have a name?如果输入名字将会打招呼 其实程序本身不复杂,程序的前面一大半都是Windows API函数的声明,这些声明都是现成的,直接用就可以了 ----------------------------------------- 新建一个工程,然后在右边把默认的那个窗体删除掉,一定要删除,然后菜单----工程----添加模块,把下面代码拷贝到新建的模块代码里面就可以了 ========================================= Option Explicit '' API函数声明 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, lpNumherOfCharsRead As Long, lpReserved As Any) 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 Declare Function SetConsoleMode Lib kernel32 (ByVal hConsoleOutput As Long, dwMode As Long) As Long Private Declare Function SetConsoleTitle Lib kernel32 Alias SetConsoleTitleA (ByVal lpConsoleTitle As String) As Long Private Declare Function SetConsoleTextAttribute Lib kernel32 (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long ''定义API函数中用到的所有常量 ''GetStdHandle函数的 nStdHandle参数的取值 Private Const STD_INPUT_HANDLE = -10& Private Const STD_OUTPUT_HANDLE = -11& Private Const STD_ERROR_HANDLE = -12& ''SetConsoleTextAttribute函数的wAttributes参数的取值(按RGB方式组合) Private Const FOREGROUND_bLUE = &H1 Private Const FOREGROUND_GREEN = &H2 Private Const FOREGROUND_RED = &H4 Private Const FOREGROUND_INTENSITY = &H8 Private Const BACKGROUND_BLUE = &H10 Private Const BACKGROUND_GREEN = &H20 Private Const BACKGROUND_RED = &H40 Private Const BACKGROUND_INTENSITY = &H80 ''SetConsoleMode的输入模式 Private Const ENABLE_LINE_INPUT = &H2 Private Const ENABLE_ECHO_INPUT = &H4 Private Const ENABLE_MOUSE_INPUT = &H10 Private Const ENABLE_PROCESSED_INPUT = &H1 Private Const ENABLE_WINDOW_INPUT = &H8 ''SetConsoleMode的输出模式 Private Const ENABLE_PROCESSED_OUTPUT = &H1 Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2 Private hConsoleIn As Long ''控制台窗口的 input handle Private hConsoleOut As Long ''控制台窗口的output handle Private hConsoleErr As Long ''控制台窗口的error handle ''主程序 Private Sub Main() Dim szUserInput As String AllocConsole ''创建 console window SetConsoleTitle VB控制台应用程序 ''设置console window的标题 ''取得console window的三个句柄 hConsoleIn = GetStdHandle(STD_INPUT_HANDLE) hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE) hConsoleErr = GetStdHandle(STD_ERROR_HANDLE) SetConsoleTextAttribute hConsoleOut, FOREGROUND_GREEN Or FOREGROUND_INTENSITY ''前景:亮绿;背景:黑 ConsolePrint What''s your name? szUserInput = ConsoleRead() If Not szUserInput = vbNullString Then ConsolePrint Hello, & szUserInput & ! & vbCrLf Else ConsolePrint You don''t have a name? & vbCrLf End If ConsolePrint vbCrLf & Press enter to exit! Call ConsoleRead FreeConsole ''销毁 console window End Sub
''程序中用到的子函数 Private Sub ConsolePrint(szOut As String) WriteConsole hConsoleOut, szOut, Len(szOut), vbNull, vbNull End Sub
Private Function ConsoleRead() As String Dim sUserInput As String * 256 Call ReadConsole(hConsoleIn, sUserInput, Len(sUserInput), vbNull, vbNull) ''截掉字符串结尾的&H00和回车、换行符 ConsoleRead = Left$(sUserInput, InStr(sUserInput, Chr$(0)) - 3) End Function