作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
本质上,我正在使用 Java 运行静默命令行扫描。然后我等待此扫描完成并在继续之前等待进程关闭。但是,直到您“按任意键继续”,该过程才会结束。另一件需要注意的事情是,命令行窗口当时是不可见的,这是有意的,所以一旦扫描完成,进程就在后台保持 Activity 状态,空闲。这是代码片段:
Main.print("Performing RKR Scan...");
try {
Process p1 = Runtime.getRuntime().exec(dir + "RootkitRemover.exe /noupdate");
try {
p1.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
Main.print("Error Scanning With RKR: " + e);
}
有什么办法可以解决这个“按任意键”的问题,无论是官方解决方案还是绕过?
最佳答案
正如我在评论中所说,您可能会收听 InputStream
直到“按任意键”。然后你应该通过 OutputStream
向进程写入一个新行。这里有一些代码可以帮助您:
public class BatchEnter {
public static void main(String[] args) throws Exception {
List<String> params = Arrays.asList(new String[] { "cmd", "/C", "C:/test/test.bat" });
ProcessBuilder builder = new ProcessBuilder(params);
builder.directory(new File("C:/test")).redirectErrorStream(true);
final Process p = builder.start();
final BufferedReader wr = new BufferedReader(new InputStreamReader(p.getInputStream()));
final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
String line = "";
try {
while ((line = wr.readLine()) != null) {
if (line.equals("Press any key")) {
String newLine = "\n\r";
writer.write(newLine);
}
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
p.waitFor();
}
}
关于代码的一些评论:
e.printStackTrace()
编辑:
如果您没有得到任何输出,您可以简单地尝试发送换行提要直到程序结束。例如,您可以每秒写入 newLine 直到进程停止。像这样的东西:
final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
while(true){
String newLine = "\n\r";
writer.write(newLine);
}
您可以启动一个写入进程的线程,并在 p.waitFor()
返回时停止它。您也应该更改条件,以获得更干净的东西,例如每秒或线程未停止。请注意,如果您正在写入流并且进程完成,您将遇到 IOException。这真的不是我会依赖的东西,但如果它能帮助你的话。
关于java - "Press Any Key To Continue"阻碍了我的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996150/
我是一名优秀的程序员,十分优秀!