 |
操作系统: win xp
编程工具: visual basic
问题: 请问在vb中如何写命令行程序,就是能在DOS窗口下显示文本的,就像qbasic写的print语句,vb好像只能在windows的窗口下写文本。谢谢!
水平: 中级(linjian)
|
| |
|
 |
VB本身不支持控制台程序(Console application)。一个简单的方法使用API函数AllocConsole,下面是例子:
1. 使用Notepad建立如下内容
DIR /W
并保存为C:\TEST.BAT
2. 在Visual Basic中,建立一个新工程,其中包括一个窗体和模块。
3. 在模块中输入以下API声明:
Option Explicit
Declare Function AllocConsole Lib "kernel32" () As Long
Declare Function FreeConsole Lib "kernel32" () As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) _
As Long
Declare Function GetStdHandle Lib "kernel32" (ByVal _
nStdHandle As Long) As Long
Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _
lpReserved As Any) As Long
Public Const STD_OUTPUT_HANDLE = -11&
4. 在窗体上添加一个按钮并输入如下代码:
Dim hConsole As Long
Private Sub Command1_Click()
Dim Result As Long, sOut As String, cWritten As Long
sOut = "Hi There" & vbCrLf
Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _
ByVal 0&)
Shell "C:\TEST.BAT"
End Sub
Private Sub Form_Load()
If AllocConsole() Then
hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
Else
MsgBox "Couldn't allocate console"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
CloseHandle hConsole
FreeConsole
End Sub
5. 运行程序,将显示一个空白的DOS窗口。
6. 点击按钮。sOut中字符串和批文件的内容都显示在DOS窗口中。
7. 关闭窗体。DOS窗口也将关闭。
这样虽然可以建立DOS窗口并显示内容,不过这个程序并不是一个真正的控制台程序。要实现真正的控制台程序稍微复杂一些,请参考http://www.devx.com/premier/mgznarch/vbpj/1998/03mar98/bb0398.pdf。不过该文提供的MkConsole函数只能在英文版本的Windows下正确运行,在中文系统下你需要对MkConsole工程进行修改。
武安的意见:
用以下语句也可:
open "c:\test.bat" for output as #1
print #1“t1 ” //t1表示你要写的第一命令行
print #1,“t2 ”//有几条命令写几个print
;
;
close #1
p=shell "c:\test.bat"
Magi注:这里是写一个批处理文件,并不是一个真正的控制台程序。
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面, 。
|
| |
|
| |
|
| |
|
|