Jump to content

Recommended Posts

Posted

Hi,

I am trying to read the console output of an "active" command prompt window. The following code that I tested with, causes the cmd window to close at the very same time when it is run. I want the command prompt window to stay open and be able to read the output of the cmd window. Please tell me how to achieve this.

$pid=Run("cmd.exe", "", @SW_SHOWMAXIMIZED, $STDIN_CHILD)

Sleep(2000)
$data = StdoutRead($pid)
ConsoleWrite("Debug:" & $data & @LF)

 

Thanks,

Anit

Posted (edited)
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
#include <Misc.au3>
#include <WinAPISys.au3>
Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
Run('cmd')
Global $hCmd = 0, $cmdtext, $cmdtext2
Do
    If _IsPressed('01') Then
        $hCmd = WinGetTitle("[active]")
    EndIf
    Sleep(100)
Until $hCmd <> ''
SendKeepActive($hCmd)
$cmdtext2 = ClipGet()
Send( "! es{Enter}" )
$cmdtext = ClipGet()
ClipPut($cmdtext2)
MsgBox(64, '$Read', $cmdtext)

The only thing i can help with.

See this post

Edited by careca
  Reveal hidden contents

IUIAutomation - Topic with framework and examples

Au3Record.exe

  • Moderators
Posted

Moved to the appropriate forum, as the Developer General Discussion forum very clearly states:

  Quote

General development and scripting discussions.


Do not create AutoIt-related topics here, use the AutoIt General Help and Support or AutoIt Technical Discussion forums.

Expand  

Moderation Team

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted

hmmm, there are 2

Example()

Func Example()
    Local $iPID = Run(@ComSpec & " /k DIR", @SystemDir, @SW_SHOW, 6) ; 6 = BitOR($STDERR_CHILD, $STDOUT_CHILD)
    Local $sOutput = ""
    While 1
        $sOutput &= StdoutRead($iPID)
        If @error Then ; Exit the loop if the process closes or StdoutRead returns an error.
            ExitLoop
        EndIf
        If $sOutput Then MsgBox(0, "Stdout Read:", $sOutput)
        $sOutput = ""
    WEnd

    $sOutput = ''
    While 1
        $sOutput &= StderrRead($iPID)
        If @error Then ; Exit the loop if the process closes or StderrRead returns an error.
            ExitLoop
        EndIf
        If $sOutput Then MsgBox(0, "Stderr Read:", $sOutput)
        $sOutput = ""
    WEnd
    MsgBox(0, "Done", "done, closing the script.")
EndFunc   ;==>Example

1. if you pipe the output to a file, you don't see it. You are piping to your script. But once you have the text you can display in a GUI of your own.

2. The cmd.exe /K yourCommand should keep the window open and shown with the above script, but it does not. @Melba23 this is a bug :( 

Follow the link to my code contribution ( and other things too ).
FAQ - Please Read Before Posting.
autoit_scripter_blue_userbar.png

Posted

Here a different approach, similar of @careca :

#include <Constants.au3>

Opt("MustDeclareVars", 1)
Opt("SendKeyDelay", 0)

If Not ProcessExists("cmd.exe") Then
  Run("cmd.exe")
  ProcessWait("cmd.exe")
EndIf
Local $hDOS = WinGetHandle("[CLASS:ConsoleWindowClass]")
If Not $hDOS Then Exit MsgBox($MB_SYSTEMMODAL, "", "Console not found")
WinActivate($hDOS)
MsgBox ($MB_SYSTEMMODAL,"",Example2 ($hDOS, "dir"))

Func Example2($hWnd, $sCmd, $iDelay = 100)
  ControlSend($hWnd, "", "", "cls & " & $sCmd & @CRLF)
  Sleep ($iDelay)
  Opt("SendKeyDelay", 50)
  ControlSend($hWnd, "", "","! mt{Enter}") ; french OS
  Opt("SendKeyDelay", 0)
  Return ClipGet()
EndFunc   ;==>Example2

@argumentum  I personally do not think it is a bug.  I believe it is a normal behavior for a child process to close when its parent prematurely ends.  Especially if the parent is hooked to the child stream as any child ConsoleWrite will error out.

Posted

Well, it is Alt key, then E for Edit menu item, then S for Select all submenu item. Enter places the text in clipboard.

It is curious that when i try that combination of keys, i cannot bring the menu up.

But still, it works.

  Reveal hidden contents

IUIAutomation - Topic with framework and examples

Au3Record.exe

Posted

@careca There's a space in the code, Alt + Space brings up a hidden menu :) You can see it by right clicking on the title bar as well.

All my code provided is Public Domain... but it may not work. ;) Use it, change it, break it, whatever you want.

  Reveal hidden contents
Posted

Ah the space! thanks.

  Reveal hidden contents

IUIAutomation - Topic with framework and examples

Au3Record.exe

Posted (edited)

@anit do you already try  @Mat 's console.au3 UDF:

https://github.com/MattDiesel/au3-console

?

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...