Java 防止wmic.exe写入TempWmicBatchFile.bat
我想在Java应用程序中检查windows虚拟键盘是否已经在运行 我搜索了它,发现我可以使用Java 防止wmic.exe写入TempWmicBatchFile.bat,java,virtual-keyboard,temporary-files,wmic,on-screen-keyboard,Java,Virtual Keyboard,Temporary Files,Wmic,On Screen Keyboard,我想在Java应用程序中检查windows虚拟键盘是否已经在运行 我搜索了它,发现我可以使用wmic.exe搜索进程 这就是我正在做的: Process proc = Runtime.getRuntime().exec("wmic.exe"); BufferedReader input = new BufferedReader(new InputStreamReader(proc .getInputStream())); OutputStreamWriter oStream = new
wmic.exe
搜索进程
这就是我正在做的:
Process proc = Runtime.getRuntime().exec("wmic.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(proc
.getInputStream()));
OutputStreamWriter oStream = new OutputStreamWriter(proc
.getOutputStream());
oStream .write("process where name='osk.exe' get caption");
oStream .flush();
oStream .close();
input.readLine();
while ((in = input.readLine()) != null) {
if (in.contains("osk.exe")) {
input.close();
proc.destroy();
return;
}
}
input.close();
proc.destroy();
这是可行的,但是wmic
正在以某种方式创建文件TempWmicBatchFile.bat
,其中name='osk.exe'获取标题的过程是行
如何防止这种情况发生?您可以避免打开其他流来传递另一个命令。这就是创建临时bat文件的原因
使用下面的代码。它不会创建临时批处理文件
public class WmicTest {
public static void main(String[] args) throws IOException {
Process proc = Runtime.getRuntime().exec("wmic.exe process where name='osk.exe' get caption");
BufferedReader input = new BufferedReader(new InputStreamReader(proc
.getInputStream()));
// OutputStreamWriter oStream = new OutputStreamWriter(proc
// .getOutputStream());
// oStream.write("process where name='osk.exe' get caption");
// oStream.flush();
// oStream.close();
input.readLine();
String in;
while ((in = input.readLine()) != null) {
if (in.contains("osk.exe")) {
System.out.println("Found");
input.close();
proc.destroy();
return;
}
}
input.close();
proc.destroy();
}
}
完美的正是我想要的:)