none
vb.net 2010 如何实时读取CMD的回显信息/发送字符串。 RRS feed

  • 问题

  • 想做一个小程序,目的是为了启动一个控制台程序(带参数),不创建窗口,实时获取程序的回传数据,就像cmd一样

    比如吧,在cmd里运行ping命令,控制台会实时显示出ping.exe的回传数据(一行一行的增加那种)

    不过实时回传的办法有cmd的 ">" 即管道符号

    但是怎么向cmd发送按键呢

    =======例=======

    运行如下命令

    shell("java -jar xxx.jar",vbHide)

    然后等待java进程退出,并实时读取java.exe的回传数据至Textbox_JavaOutput

    如果此时,Textbox_SendLine.Text = stop

    点击Button_SendMessage即会把stop发送至java.exe,等于在java创建的新窗口中输入stop然后回车

    并且保持实时读取java.exe的回传数据至Textbox_JavaOutput

    Process()类的读取方式只能在java.exe退出后才能读取内容,无法做到实时读取。

    代码应该怎么写?


    • 已编辑 Elepover 2015年2月15日 7:35 未完善
    2015年2月15日 7:35

答案

  • 想做一个小程序,目的是为了启动一个控制台程序(带参数),不创建窗口,实时获取程序的回传数据,就像cmd一样

    比如吧,在cmd里运行ping命令,控制台会实时显示出ping.exe的回传数据(一行一行的增加那种)

    不过实时回传的办法有cmd的 ">" 即管道符号

    但是怎么向cmd发送按键呢

    =======例=======

    运行如下命令

    shell("java -jar xxx.jar",vbHide)

    然后等待java进程退出,并实时读取java.exe的回传数据至Textbox_JavaOutput

    如果此时,Textbox_SendLine.Text = stop

    点击Button_SendMessage即会把stop发送至java.exe,等于在java创建的新窗口中输入stop然后回车

    并且保持实时读取java.exe的回传数据至Textbox_JavaOutput

    Process()类的读取方式只能在java.exe退出后才能读取内容,无法做到实时读取。

    代码应该怎么写?


    你提到的需求跟CMD的机制不能算是同一类型的获取显示信息的方式。

    至于跟java.exe 来交互, 这得取决于 这个exe是否有对应API 来做沟通。

    另外论坛是用来对单个问题来提供帮助的 不是用来给某个项目来实现具体需求的。

    请自己尝试完之后分离出自己碰到的问题,再单独发帖来获取帮助。

    总而言之, 对于对应窗口的返回信息, 需要你了解该app的返回信息的机制。或者用WIN32的API 根据对应控件的句柄来获取内容。

    对于输入信息, 我看到你用的shell的方式来调用的, 那你可以尝试下面这个例子(转自http://www.cnblogs.com/samlin/archive/2009/03/07/1406040.html

    SendKeys是将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样,简单说就是模拟按键
    看例子
    Dim ReturnValue, I
    ReturnValue = Shell("Calc.EXE", 1) ' 运行计算器。
    AppActivate ReturnValue ' 激活计算器。
    For I = 1 To 100 ' 设置计数循环。
    SendKeys I & "{+}", True ' 按下按键给计算器
    Next I ' 将所有 I 值相加。
    SendKeys "=", True ' 取得总合。
    msgbox "看结果吧"
    SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器。


    remember make the reply as answer and vote the reply as helpful if it helps.

    • 已标记为答案 Elepover 2015年2月16日 9:00
    2015年2月16日 7:15