下面一个用于从窗口获取进程列表
Process proc = Runtime.getRuntime().exec ("tasklist.exe");
但我想获得应用程序标签内容本身我需要一个解决方案
Process proc = Runtime.getRuntime().exec ( ? ? ?);
我试图给出答案,即使帖子已经有一年多了。
尝试使用以下代码片段:
private static final String STR_MATCH = "My Java Application";
String strProcess;
BufferedReader input = null;
try {
if(System.getProperty("os.name").startsWith("Windows")) {
Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\\system32\\" + "tasklist.exe /v /FI \"STATUS eq RUNNING\" /FI \"imagename eq javaw.exe\"");
input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((strProcess = input.readLine()) != null) {
if(strProcess.contains(STR_MATCH))
/* lot of code here */
}
// Close resources
input.close();
}
catch(IOEXception ioe) {
/* handle exception */
}
这里要注意的是用于获取 的方式Process p
,即:
Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\\system32\\" + "tasklist.exe /v /FI \"STATUS eq RUNNING\" /FI \"imagename eq javaw.exe\"");
/FI "STATUS eq RUNNING" /FI "imagename eq javaw.exe"
调用时添加的过滤器tasklist.exe
允许获取与进程相关的更多信息javaw.exe
,包括窗口/应用程序名称。
这是从命令“ ps -e ”解析进程列表的另一种方法:
try {
String line;
Process p = Runtime.getRuntime().exec("ps -e");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
如果您使用的是 Windows,那么您应该更改以下行:“Process p = Runtime.getRun...”等...(第 3 行),如下所示:
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
无法获取应用程序,因为这只是此选项卡上显示的打开窗口。每个应用程序都是一个过程。
你可以从 c# 试试这个:
var openWindowProcesses = System.Diagnostics.Process.GetProcesses()
.Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer");
openWindowProcesses 应该包含所有打开的应用程序,它们有一个活动的人窗口。
我将 'p.ProcessName != "explorer"' 放在 where 表达式中,因为资源管理器是桌面的主要进程,它永远不应该被关闭。
要监视流程的执行,您可以使用“ManagementEventWatcher”类。请看这个。