Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.basic.visual.misc > #478
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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