Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.basic.visual.misc > #478

Re: Redirecting VB script sub shell standard output

From Ron Weiner <NoOne@NoWare.NutThing>
Newsgroups comp.lang.basic.visual.misc
Subject Re: Redirecting VB script sub shell standard output
Date 2011-10-11 21:04 -0400
Organization WorksRite
Message-ID <j72p3p$ev2$1@dont-email.me> (permalink)
References (1 earlier) <j6t5jl$r41$1@dont-email.me> <804nzhtme6.fsf@gmail.com> <o15597lntsvapuar8erjlcmaetotktlggu@4ax.com> <8062jwxfm2.fsf@gmail.com> <80aa97jmm4.fsf@gmail.com>

Show all headers | View raw


Vincent Belaïche has brought this to us :
> vincent.belaiche@gmail.com (Vincent Belaïche) writes:
>
>> ralph <nt_consulting64@yahoo.net> writes:
>> 
>>> On Mon, 10 Oct 2011 08:02:09 +0200, vincent.belaiche@gmail.com
>>> (Vincent Belaïche) wrote:
>>> 
>>>> Ron Weiner <NoOne@NoWare.NutThing> writes:
>> 
>> [...]
>> 
>>>>> Rdub
>>>> 
>>>> Redirecting to a file won't do it. My VB script is run itself from a
>>>> console with csscript, and I would like the output of the sub-shell
>>>> run console application to be run in the same console.
>>>> 
>>>> 
>>>> Console (A)
>>>>   +-------- VB script (B)
>>>>             +---- sub-shell with console application (C)
>>>> 
>>>> 
>>>> I would like the standard output of `B' and `C' to be displayed in the
>>>> same scrollable screen that is part of `A'.
>>>> 
>>> 
>>> Still not clear to me, but browse for "Shell and Wait". You'll find
>>> examples for VB as well as VBS.
>>> 
>>> If necessary have each subsquent app write to a file, then 'echo' that
>>> output from A to the screen.
>>> 
>>> -ralph
>> 
>> Hello Ralph,
>> 
>> Actually I do not need some specific code to achieve "Shell And Wait",
>> this is already supported by WshShell with the 3rd argument of the Run
>> method.
>> 
>> Set http://msdn.microsoft.com/en-us/library/aew9yb99(v=VS.85).aspx
>> 
>> see also: 
>> http://msdn.microsoft.com/en-us/library/d5fk67ky(v=VS.85).aspx#CommunityContent
>> 
>> Here is an example:
>> '---------------------------- myscript.vbs ----------------------------
>> Dim oShell, iReturn
>> Set oShell = WScript.CreateObject("WScript.Shell")
>> 
>> Const iACTIVATE_AND_DISPLAY = 1
>> 
>> iReturn = oShell.Run("calc.exe",iACTIVATE_AND_DISPLAY, True)
>> 
>> WScript.Echo "The end!"
>> '----------------------------------------------------------------------
>> 
>> In this example you will have the echo "The end!" only after exiting
>> calc.exe, so I do have a wait.
>> 
>> What I would like is that if I launch this script (let's call it
>> myscript.vbs) with the DOS command:
>> 
>> Rem -------------------------------------------------------------------
>> cscript myscript.vbs
>> Rem -------------------------------------------------------------------
>> 
>> Then any output made to the standard output by the application (C) goes
>> to the same DOS window (A) under which I launched cscript (B), just
>> like "The end!" is output by the script (B) to this DOS window (A).
>> 
>> Note that in the example above the application (C) is is just calc.exe
>> but in reality that would be some console application.
>> 
>> Hopefully my question is clear now...
>> 
>>    Vincent.
>
>
> Hello,
>
> I have found a way to allmost achieve what I am seeking for (in the
> example below the console application is TREE.COM):
>
> '-----------------temp.vbs --------------------------------------------
> Dim oShell
> Set oShell = WScript.CreateObject("WScript.Shell")
>
> Dim oExec
> Set oExec = oShell.Exec("TREE.COM")
> Dim sLine
> Do While True
>
>      Do While Not oExec.StdOut.AtEndOfStream 
> 	      sLine = oExec.StdOut.ReadLine
>           WScript.Echo sLine
>      Loop
> 	 If oExec.Status = 1 Then 
> 	    Exit Do
> 	 Else
> 	    WScript.Sleep 100
> 	 End if
> Loop
>
> WScript.Echo "That's all!"
> '----------------------------------------------------------------------
>
> But that does not work properly with non ASCII characters. You can try
> in a DOS console to type TREE, and then CSCRIPT temp.vbs and see the
> difference.
>
> Any idea how to  solve this ?
>
>    Vincent.

Yup!

First stop with the wscript.  You can do it all in classic VB.

Create a new form and put a command button and a text box in it.

Change the Multi line prop of the text box to true.

Change the font prop of the text box to one that has the old DOS line
drawing characters.  I used the Windows Terminal Font.

Paste in this code (Watch for line wraping)

-=-=-=-=-=-=-=-=-=-=-= Code starts -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Option Explicit

Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const STATUS_PENDING = &H103&
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Function ShellandWait(ExeFullPath As String, _
        Optional TimeOutValue As Long = 0, _
        Optional WindowStyle As VbAppWinStyle = vbMinimizedNoFocus) As Boolean

    Dim lInst As Long
    Dim lStart As Long
    Dim lTimeToQuit As Long
    Dim sExeName As String
    Dim lProcessId As Long
    Dim lExitCode As Long
    Dim bPastMidnight As Boolean

    On Error GoTo ErrorHandler

    lStart = CLng(Timer)
    sExeName = ExeFullPath

    'Deal with timeout being reset at Midnight
    If TimeOutValue > 0 Then
        If lStart + TimeOutValue < 86400 Then
            lTimeToQuit = lStart + TimeOutValue
        Else
            lTimeToQuit = (lStart - 86400) + TimeOutValue
            bPastMidnight = True
        End If
    End If

    lInst = Shell(sExeName, WindowStyle)

    lProcessId = OpenProcess(PROCESS_QUERY_INFORMATION, False, lInst)

    Do
        Call GetExitCodeProcess(lProcessId, lExitCode)
        DoEvents
        If TimeOutValue And Timer > lTimeToQuit Then
            If bPastMidnight Then
                 If Timer < lStart Then Exit Do
            Else
                 Exit Do
            End If
        End If
    Loop While lExitCode = STATUS_PENDING

    ShellandWait = True
    Exit Function
ErrorHandler:
    ShellandWait = False
End Function

Private Sub Command1_Click()

    Dim fh As Integer

    If Not ShellandWait("cmd /c Tree c:\dell > c:\dell\rw.txt", , vbHide) Then
        MsgBox "Error attempting to start tree.com!", vbExclamation, "Error"
    End If

    fh = FreeFile
    Open "c:\dell\rw.txt" For Input As #fh
    Text1.Text = Input(LOF(fh), #fh)
    Close #fh
End Sub

-=-=-=-=-=-=-=-=-=-=-= Code ends -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Fix up all of the string literals I used in this example to stuff that
works on your system.

Rdub

Back to comp.lang.basic.visual.misc | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-09 22:12 +0200
  Re: Redirecting VB script sub shell standard output Ron Weiner <NoOne@NoWare.NutThing> - 2011-10-09 18:01 -0400
    Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-10 08:02 +0200
      Re: Redirecting VB script sub shell standard output ralph <nt_consulting64@yahoo.net> - 2011-10-10 01:50 -0500
        Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-11 07:27 +0200
          Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-11 22:32 +0200
            Re: Redirecting VB script sub shell standard output Ron Weiner <NoOne@NoWare.NutThing> - 2011-10-11 21:04 -0400
              Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-14 20:37 +0200
                Re: Redirecting VB script sub shell standard output "Thorsten Albers" <gudea@gmx.de> - 2011-10-14 20:55 +0000
                Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-19 19:31 +0200
  Re: Redirecting VB script sub shell standard output ralph <nt_consulting64@yahoo.net> - 2011-10-09 21:45 -0500
  Re: Redirecting VB script sub shell standard output Eric Coleman <eric@strategon.com> - 2011-10-13 19:45 -0500
    Re: Redirecting VB script sub shell standard output vincent.belaiche@gmail.com (Vincent Belaïche) - 2011-10-14 20:14 +0200

csiph-web