我想用AutoHotkey执行选定的java代码。通常我可以使用以下cmd命令执行单个java文件:
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。因此我无法使用results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll()
命令正确查看结果。如何解决此问题?
答案 0 :(得分:2)
您的脚本存在以下问题:
Sleep
WScript.Shell
的输出。以下测试工作:
^+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
}