Как я могу выполнить один файл .java с помощью autohotkey? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу выполнить выбранный код Java с помощью AutoHotkey. Обычно я могу выполнить один файл Java с помощью следующих команд cmd:

javac execute.java //compiling and creating execute.class
java execute       //executing .class file

Я хочу автоматизировать этот процесс с помощью AutoHotkey. Я написал следующий код AutoHotkey

^+e::
sleep 30
Send ^c
sleep 30
FileAppend,Clipboard,"C:\Users\q\Desktop\execute.java"
sleep 30
run cmd.exe,javac execute.java,hide  ; compiling successfully
sleep 2000
results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll() ; can't display executing result
sleep 1000
msgbox % results
return

Но я получаю следующие результаты: https://imgur.com/a/PwsxqEB результаты . Так что я не могу правильно увидеть результаты с помощью команды results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll(). Как я могу это исправить вопрос?

1 Ответ

0 голосов
/ 03 мая 2018

Проблемы с вашим скриптом:

  1. Вам не нужно так много Sleep х
  2. Некоторые параметры имеют неправильную форму.
  3. Вам нужен цикл для чтения вывода из WScript.Shell.
  4. Есть некоторые проблемы с рабочим каталогом.

Следующие проверены на работу:

^+e::
Java_CopyCompileAndRun() {
    Static objShell := ComObjCreate("WScript.Shell")   ; Speeds up subsequent runs
    KeyWait Shift   ; Possilby unnecessary
    KeyWait e       ; Possilby unnecessary
    Clipboard := ""
    Send ^c
    ClipWait 1
    FileDelete % "C:\Users\q\Desktop\execute.java"
    FileAppend % Clipboard, % "C:\Users\q\Desktop\execute.java"
    RunWait % A_ComSpec " /c ""javac execute.java""", C:\Users\q\Desktop\, Hide
    objExec := objShell.Exec(A_ComSpec " /c ""cd ""C:\Users\q\Desktop\"" & java execute""")
    While !(objExec.StdOut.AtEndOfStream && objExec.StdErr.AtEndOfStream) {
        sStdOut   .= objExec.StdOut.ReadAll()
        , sStdErr .= objExec.StdErr.ReadAll()
        Sleep 10
    }
    MsgBox % "StdOut :`n" sStdOut "`n`nStdErr :`n" sStdErr
}
...