Я ищу приложение, которое работает следующим образом:

  1. Приложение показывает / имеет область ввода / поле.
  2. И он запускает предварительно заданную команду / приложение (используя входные данные в качестве параметров) и показывает команды, выводимые параллельно (в режиме реального времени) при вводе.

Таким образом, что-то вроде функции поиска по типу в браузере, за исключением того, что вместо поиска html-страницы выполняется пользовательская команда и отображается вывод команд (в другом окне / блокноте / чем угодно - я не особо разбираюсь, как)

Приложение может быть основано на скрипте gui/console/cygwin/autohotkey. Я в порядке со всеми

Существует ли что-то подобное?

Я уверен, что AutoHotkey Pro может сделать что-то подобное довольно легко. Так что, если кто-то рядом, пожалуйста, поделитесь, как это можно сделать / какие-либо советы о том, что искать.

Спасибо

Изменить: Отвечая на вопросы:

Когда вы говорите, что хотите, чтобы выходные данные были активными, было бы приемлемо, если бы выходные данные отображались только после полного выполнения каждой команды?

Я думаю, нет, команда должна быть запущена на каждом событии нажатия клавиш, без необходимости вводить.

Пытаетесь повторно выполнить варианты команды? Вы бы очищали окно вывода каждый раз, когда выполняется новая команда, так что в окне вывода отображается только результат последней выполненной команды?

Да! Точно.

Сама команда не будет сложной, вернет что-то за миллисекунды ...

1 ответ1

0

Вы можете попробовать это в AutoHotkey. Не выполняет даже элементарных вещей, таких как возможность изменить размер окна, но это может сработать для вас. Кроме того, первое поле ввода не помечено, но это рабочий каталог для использования. После того, как вы наберете команду и нажмете Enter, она автоматически включится после этого и будет автоматически запускаться после каждого нажатия клавиши.

;---------------------------------------------------------------------------------------------
; 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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .