Um aplicativo do Windows: Mostra a saída ao vivo dos resultados (stdout?) do comando pré-especificado

0

Estou procurando um aplicativo que funcione da seguinte maneira:

  1. O aplicativo mostra / possui uma área de entrada / caixa.
  2. E ele executa um comando / aplicativo pré-especificado (usando a entrada como paramas) e mostra os comandos de saída paralelamente (ao vivo) conforme eu digito.

Então, algo como a funcionalidade de localizar um tipo de navegador, exceto que em vez de procurar uma página html, está executando um comando personalizado e mostrando a saída dos comandos (em outro windows / bloco de notas / qualquer coisa. )

O aplicativo pode ser baseado no script gui / console / cygwin / autohotkey. Eu estou bem com tudo

Existe algo assim?

Tenho certeza de que um autohotkey pro pode fazer algo assim com bastante facilidade. Portanto, se alguém estiver por perto, compartilhe como isso pode ser feito / dicas sobre o que procurar.

Obrigado

Editar: respondendo às perguntas:

When you say you want the output to be live, would it be acceptable if the output was shown only after each command was executed in full?

Acho que não, O comando deve ser executado em cada evento keydown, sem ter que pressionar Enter.

Trying to re-execute variations of a command? Would you clear the output window each time a new command is executed such that the output window only shows the output for the last command executed?

Sim! Precisamente.

O comando em si não será complexo, retornará algo em milissegundos ...

    
por gyaani_guy 04.03.2016 / 09:00

1 resposta

0

Você pode tentar isso no AutoHotkey. Não faz nem mesmo coisas básicas, como redimensionar a janela, mas pode funcionar para você. Além disso, a primeira caixa de entrada não é rotulada, mas é o diretório de trabalho a ser usado. Depois de digitar um comando e pressionar enter, ele ativará a atualização automática depois disso e será executado automaticamente a cada pressionamento de tecla a seguir.

;---------------------------------------------------------------------------------------------
; CommandConsole.ahk
;---------------------------------------------------------------------------------------------
Main:
    myTitle := "Command Console"
    myFont  := "Courier New"
    myFontSize := "10"
    xMargin := 10, yMargin := 10
    xSpace  := 10, ySpace  := 10

    txtWidth  := 700, butWidth := 100

    inputHeight  := 20
    outputHeight := 600

    firstRun := True
    immediateExec := False

    Gui, Add, Button, x0 y0 w0 h0 default gbutSubmit,       ; default button used for grabbing text entry

    vertical := yMargin
    Gui, Font, % "s" myFontSize, % myFont
    Gui, Add, Edit, % "x" xMargin " y" vertical " w" txtWidth " h" inputHeight " vWorkingDir", .        ; current directory is default working directory, i.e., "."
    Gui, Font

    Gui, Add, Button, % "x" xMargin+txtWidth+xSpace " y" vertical " w" butWidth " h" 2*inputHeight+yspace " gButAuto vButCaption", % "Auto-Update'n" . (immediateExec ? "On" : "Off")

    vertical += inputHeight + ySpace
    Gui, Font, % "s" myFontSize, % myFont
    Gui, Add, Edit, % "x" xMargin " y" vertical " w" txtWidth " h" inputHeight " gEditUpdated vtxtInput",  
    Gui, Font


    Gui, Font, % "s" myFontSize, % myFont
    vertical += inputHeight + ySpace
    Gui, Add, Edit, % "x" xMargin " y" vertical " w" txtWidth+xSpace+butWidth " h" outputHeight " vtxtOutput " ; disabled"
    Gui, Font

    vertical += OutputHeight+yMargin
    Gui, Show, % "w" txtWidth+xSpace+butWidth+2*xMargin " h" vertical, % myTitle

    GuiControl, focus, txtInput     ; focus on the command input for entry
return

;---------------------------------------------------------------------------------------------
; GuiClose() - Exit app when GUI closes
;---------------------------------------------------------------------------------------------
GuiClose() {
    ExitApp
}

;---------------------------------------------------------------------------------------------
; butSubmit() - No-size button to capture Enter keystrokes when auto-update is off
;---------------------------------------------------------------------------------------------
butSubmit() {
    global
    EnterWasPressed := True
    if firstRun and !immediateExec  ; set auto-update after the first command is executed if it's not set already
        ButAuto()
    else
        EditUpdated()           ; on subsequent
}

;---------------------------------------------------------------------------------------------
; EditUpdated()
;---------------------------------------------------------------------------------------------
EditUpdated() {
    global      ; easy access to GUI vars

    Gui, Submit, NoHide
    ;tooltip Edit was updated: %txtInput%   

    if immediateExec or EnterWasPressed { 
        guiControl,, txtOutput, % RunWaitOneB(txtInput, WorkingDir)
        EnterWasPressed := False
    }

    lasttxtInput := txtInput
    Gui, Submit, NoHide
    if (txtInput<>lastTxtInput)
        setTimer, EditUpdated, -1

    return
}

;---------------------------------------------------------------------------------------------
; ButGo() - Called every time the user clicks auto-execute True/False Button
;---------------------------------------------------------------------------------------------
ButAuto() {
    global
    immediateExec := !immediateExec
    guiControl,, butCaption, % "Auto-Update'n" . (immediateExec ? "On" : "Off")
    if immediateExec
        EditUpdated()
}

;---------------------------------------------------------------------------------------------
; RunWaitOne() - From AutoHotkey Help for RunWait (has annoying command prompt flash up)
;---------------------------------------------------------------------------------------------
RunWaitOne(command) {
    shell := ComObjCreate("WScript.Shell")      ; WshShell object: http://msdn.microsoft.com/en-us/library/aew9yb99
    exec := shell.Exec(ComSpec " /C " command)  ; Execute a single command via cmd.exe
    return exec.StdOut.ReadAll()                ; Read and return the command's output
}

;---------------------------------------------------------------------------------------------
; RunWaitOneB() - Get stdout by writing to a temp file vs. reading the buffer
;---------------------------------------------------------------------------------------------
RunWaitOneB(command, WorkingDir:=".") {
    tmpFile := A_Temp . "\temp.txt"
    FileDelete, %tmpFile%
    RunWait, %comspec% /c %command% > %tmpFile%, %WorkingDir%, Hide
    FileRead, output, %tmpFile%
    return output
}
    
por 07.03.2016 / 07:43