如何使用java代码在Windows(taskmanager - >应用程序)中打开应用程序列表?

时间:2016-03-12 11:02:33

标签: java windows taskbar

以下是我想要的快照!

Windows Application Task List

我正在尝试在java中开发一个程序,它可以在任务栏中获取所有打开的应用程序。我尝试了很多链接,但没有一个对我有帮助。 Ganesh Rangarajan in July 2013也提出了同样的问题,但没有人回答他。这是他的question

4 个答案:

答案 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中测试过代码,效果很好。 唯一的问题似乎是一些名为“程序管理器”的默认内部(?)窗口始终包含在列表中。

您需要来自:https://github.com/java-native-access/jna

的两个JAR(JNA库)

答案 1 :(得分:1)

这个回复对你来说太晚了,但可能会帮助那些现在面临类似问题的人。

我刚刚编写了类似的应用程序,但只打开了CMD

您可以通过

替换listCommand
powershell -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)

命令“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.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();
        }