如何使用java代码在Windows(taskmanager - >应用程序选项卡内容)中打开应用程序

时间:2013-07-04 13:48:17

标签: java windows

下面一个用于从Windows获取进程列表

       Process proc = Runtime.getRuntime().exec ("tasklist.exe");

enter image description here

但我想获取应用程序选项卡内容本身 我需要一个解决方案

 Process proc = Runtime.getRuntime().exec ( ? ? ?);

enter image description here

2 个答案:

答案 0 :(得分: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.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应该包含他们有一个活动人窗口的所有打开的应用程序。

我在where表达式中放了'p.ProcessName!=“explorer”',因为资源管理器是桌面的主要进程,它永远不会被关闭。

要观察流程的执行,您可以使用“ManagementEventWatcher”类。请见this

答案 1 :(得分:0)

即使帖子已超过一年,我也会尽力给出答案。

尝试使用以下代码段:

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相关的更多信息,包括窗口/应用程序名称。