从java程序closuresIE进程

我写了一个程序来打开IE使用

Process process=Runtime.getRuntime().exec(); 

现在我想从我的Swing GUI中单击一个button来closuresIE的这个实例。
我尝试了process.destroy()但它不工作。
我也读了process.waitfor(),但只有在IEclosures后才能调用,即我手动closuresIE。

另外如果我使用

 Runtime.getRuntime().exec("taskkill /F /IM iexplore.exe"); 

它杀死了IE运行的所有实例。
我只想closures与我上面的过程相关的IE浏览器。

请build议我该怎么做?

对于Internet Explorer9,这不会很简单。 IE9处理多个窗口及其进程的方式限制了通过关闭选择窗口的选项。

即使当你找到正确的进程,杀死它可能会导致所有其他的IE窗口被杀死。

IE使用SysFader来管理其他窗口和标签,当试图杀死正确的一个,它会试图恢复它。

您可以搜索并查看外部库,如SIGAR ,它允许您查询进程。


对于其他进程,可能会有一种方法来标记进程启动时,然后保存PID的时候,我们需要关闭它。

示例只是为了演示这个想法,不要使用这个

 Date date = new Date(); DateFormat formatter = new SimpleDateFormat("HHmmssSSS"); String tag = "test"+formatter.format(date); Process p = Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe www.google.com/search?q=" + tag ); p.waitFor(); 

这将标记进程,因为在详细的TASKLIST有一个“窗口标题”,它将显示这个标记。

然后,通过解析列表可以确定PID

 Process p2 = Runtime.getRuntime().exec("TASKLIST /V /FI \"IMAGENAME eq iexplore.exe\""); BufferedReader input = new BufferedReader(new InputStreamReader(p2.getInputStream())); String line, pid = ""; while ((line = input.readLine()) != null) { if(line.contains(tag)){ String[] taskTokens = line.replaceAll("\\s+", " ").trim().split(" "); pid = taskTokens[1]; System.out.println("PID:"+pid); } } input.close(); 

那么如果你想关闭指定的PID,你可以调用

 Runtime.getRuntime().exec("TASKKILL /PID " + pid); 

当你使用IE9进行测试时,你会注意到SysFader会给你创建一个新的进程的PID,但是最后一个被调用的PID将会和前一个一样,得到一个新的PID

我无法测试任何其他版本..随意定制您的需求的想法