读书人

vb有办法标准输出吗?该怎么处理

发布时间: 2012-08-08 14:32:45 作者: rapoo

vb有办法标准输出吗?
我想用java来调用一个vb编写的程序,java可以获得一个程序的标准输出流 比如cmd.exe dir等命令的输出就可以被java获得
现在想问问vb有没有办法实现标准的输出
谢谢大家了

[解决办法]
不知道为什么很多人见猫就是鸭,只看问题中的关键字就回答。。。。

人家要的是java调用vb获得返回结果。
而不是vb调用其他程序获得结果。

在cmd里敲入一个程序,然后可以在黑黑的屏幕上回显一串字符。这样的程序叫做控制台程序。

vb6是做win32程序的,本身不支持做控制台程序,记得有过范例,那也是调用一大堆api函数实现的,不稳定,根本不现实。 不过在vb.net中是支持的。如果楼主不想用曲线方法可以改用vb.net实现。

曲线方法就是你的vb程序将要传递的结果写入到本地一个文件,然后你的java程序读取这个文件。



[解决办法]

探讨
我想用java来调用一个vb编写的程序,java可以获得一个程序的标准输出流 比如cmd.exe dir等命令的输出就可以被java获得
现在想问问vb有没有办法实现标准的输出
谢谢大家了

[解决办法]
可不可以调用shell命令让DOS控制台帮你输出。如要输出“ABC”文本到C盘下的TEST.TXT文档,可以采用下面的程序。不知道楼主是不是这个意思。

VB code
myData$="ABC"Shell "cmd /k echo " & myData " > c:/test.txt"
[解决办法]
VB code
Option Explicit'' API函数声明Private Declare Function AllocConsole Lib "kernel32" () As LongPrivate Declare Function FreeConsole Lib "kernel32" () As LongPrivate Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As LongPrivate 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 LongPrivate 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 LongPrivate Declare Function SetConsoleMode Lib "kernel32" (ByVal hConsoleOutput As Long, _        dwMode As Long) As LongPrivate Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" _        (ByVal lpConsoleTitle As String) As LongPrivate 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 = &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''SetConsoleMode的输入模式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''SetConsoleMode的输出模式Private Const ENABLE_PROCESSED_OUTPUT = &H1Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2Private hConsoleIn As Long    ''控制台窗口的 input handlePrivate hConsoleOut As Long    ''控制台窗口的output handlePrivate 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 windowEnd Sub''程序中用到的子函数Private Sub ConsolePrint(szOut As String)    WriteConsole hConsoleOut, szOut, Len(szOut), vbNull, vbNullEnd SubPrivate 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 


[解决办法]
没试过就不用乱下结论,http://powervb.com/ 上的 ConsoleApp 就是在命令行窗口中被调用后能够直接在当前命令行窗口中直接进行输入输出的。

读书人网 >VB

热点推荐