以下是我想要的快照!
我正在尝试在java中开发一个程序,它可以在任务栏中获取所有打开的应用程序。我尝试了很多链接,但没有一个对我有帮助。 Ganesh Rangarajan in July 2013也提出了同样的问题,但没有人回答他。这是他的question。
答案 0 :(得分:3)
以下是获取所有(可见,不可见)窗口标题的解决方案: https://stackoverflow.com/a/11067492/6401177
如果您只想获得打开的顶级窗口的标题(即应用程序任务栏),则必须检查每个窗口的可见性(和/或检查此处列出的其他条件:http://vb.mvps.org/articles/ap200003.asp)。虽然,检查窗口的可见性似乎已经足够了。
我刚刚修改了以前代码中的方法“回调”,如下所示:
{0,1,0}
我还添加了“file.encoding”,因此标题也可以在非英语Windows环境中正确显示。 我在Windows XP / 7/8中测试过代码,效果很好。 唯一的问题似乎是一些名为“程序管理器”的默认内部(?)窗口始终包含在列表中。
的两个JAR(JNA库)答案 1 :(得分:1)
这个回复对你来说太晚了,但可能会帮助那些现在面临类似问题的人。
我刚刚编写了类似的应用程序,但只打开了CMD
您可以通过
替换listCommandpowershell -command "get-Process | format-table mainwindowtitle"
(takig关注\在java中使用它)来获取所有打开的应用程序。
public String[] getEnginesFromTaskManger()
{
// listCommand is a command to get all opened CMD program like (batches,.......)
// you can test it in your CMD as powershell -command "get-Process cmd | format-table mainwindowtitle"
String listCommand = "powershell -command \"get-Process cmd | format-table mainwindowtitle\"";
try
{
String line;
// since line length for powershell output is 79
int outLen = 79;
Process p = Runtime.getRuntime().exec(listCommand);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = input.readLine();
System.out.println("line: " + line + "\t" + line.length());
EnginesListFromTaskManeger = new ArrayList<String>();
int i = 0;
/*
I used this outLen > 0 condition to make sure that this method will close automatically
in case of no running CMD applications and you running this from your IDE's (Eclipse, Netbeans , ......)
the powershell will not stopped so i used it. */
while(line != null && outLen > 0)
{
System.out.println("line: " + line + "\t" + line.length());
line = input.readLine().trim().toLowerCase();
outLen = line.length();
EnginesListFromTaskManeger.add(i, line);
System.out.println(EnginesListFromTaskManeger.get(i));
// EnginesListFromTaskManeger[i]=(String)input.readLine().trim();
// System.out.println("EnginesListFromTaskManeger"+ EnginesListFromTaskManeger[i]);
i++;
}
input.close();
}catch(Exception err)
{
err.printStackTrace();
}
ListFromTaskManeger = new String[EnginesListFromTaskManeger.size()];
ListFromTaskManeger = EnginesListFromTaskManeger.toArray(ListFromTaskManeger);
return ListFromTaskManeger;
}
答案 2 :(得分:0)
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.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
希望信息有所帮助!
答案 3 :(得分:0)
"tasklist.exe /nh /v"
可以很好地获取正在运行的应用程序。
try {
Process p = Runtime.getRuntime().exec("tasklist.exe /nh /v");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((String line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}