2017-07-24 37 views
-2

我正在和我的學校的朋友在JAVA上做一個「應用程序」,它必須獲得在Windows上運行的進程/任務的狀態。 例如,當「chrome.exe * 32」在實際打開的會話上運行時,他必須返回一個值。Java - 如何獲取進程/任務(窗口)的狀態?

我可能是錯的,但我想用類似的東西:

if([this is the part I know now what to put here] == true) 
{ 
     return a value 
} 

,也可以與由工藝所採取的記憶,我真的不知道如何得到這個值。

謝謝。

+0

在發佈之前,您是否嘗試過在Stack Overflow或Google上尋找可能的幫助?根據你當前的問題,有人不太可能會給你所需的完整代碼。 –

回答

0

我解決了這個通過創建一個運行PowerShell命令和讀取結果信息回的過程:

Process p = new ProcessBuilder() 
     .command("powershell", "invoke-command", "-computerName", "MYCOMPUTER", "-filepath", ".\\someScript.psl") 
     .start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
p.waitFor(); 
List<String> results = new LinkedList(); 
String line; 
while ((line == reader.readLine()) != null) results.add(line); 

results現在包含您創建的過程中的所有結果的輸入。下面是包含在someScript.psl文件中的腳本:

$sched = New-Object -Com "Schedule.Service" 
$sched.connect() 
$out = @() 
$sched.GetFolder("\").GetTasks(0) | % { 
    $xml = [xml]$_.xml 
    $out += New-Object psobject -Property @{ 
     "Name" = $_.Name 
     "Status" = switch($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} $ {"Running"}} 
     "NextRunTime" = $_.NextRunTime 
     "LastRunTime" = $_.LastRunTime 
     "LastRunResult" = $_.LastTaskResult 
     "Author" = $xml.Task.Principals.Principal.UserID 
     "Created" = $xml.Task.RegistrationInfo.Date 
    } 
} 
$out | fl Name, Status, NextRunTime, LastRunTime, LastRunResult, Author, Created 
+1

謝謝你的回答。 – Volodia

0

你能得到關於使用Java 9的ProcessHandle接口的一流程的信息。 要獲取有關進程的信息,只需使用以下代碼並使用processHandle方法進行迭代。

ProcessHandle.allProcesses().forEach(process -> processStateInfo(process)); 

下面的代碼遍歷所有進程並打印一些關於這些進程的信息。

public class JavaProcess { 
    public static void main(String[] args) { 
     ProcessHandle.allProcesses().forEach(process -> getProcessInfo(process)); 
    } 

    private static void getProcessInfo(ProcessHandle process) { 
     System.out.println("PID == "+process.pid()); 
     System.out.println("Is ProcessAlive=="+process.isAlive()); 
     System.out.println("Command=="+process.info().command()); 
     System.out.println("ProcessStartTime=="+process.info().startInstant()); 
     System.out.println("Duration=="+process.info().totalCpuDuration()); 
     System.out.println("Process User=="+process.info().user()); 
    } 

} 

注意的IsAlive()方法可能會爲被請求的過程中,即使之後終止一段時間返回true。發生這種情況是因爲進程異步終止。

這裏是ProcessHandle接口的文檔。 http://download.java.net/java/jdk9/docs/api/java/lang/ProcessHandle.html

+0

謝謝你的回答。 – Volodia