簡體   English   中英

帶有正則表達式的JNA .FindWindow

[英]JNA .FindWindow with regex

您好我正在開發一個使用JNA 4.5.1的程序。 我需要知道特定程序是否正在運行。 這是我的問題:

hwnd = User32.INSTANCE.FindWindow
       (null, "Session Dev/Prod - [32 x 80]");
if (hwnd == null) {
    System.out.println("Session Dev/Prod is not running");
    Process p = null;
    try {
        p = Runtime.getRuntime()
                .exec("rundll32 
                 url.dll,FileProtocolHandler C: 
                 /ProgramData/Microsoft/Windows/Start 
                 Menu/Programs/IBM Personal 
                 Communications/TNHost");
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        p.waitFor();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
else{

    System.out.println("Host Already open");
    User32.INSTANCE.ShowWindow(hwnd, User32.SW_MAXIMIZE );        
    User32.INSTANCE.SetForegroundWindow(hwnd);
}

問題是窗口標題會根據監視器大小而變化。

hwnd = User32.INSTANCE.FindWindow(null, "Session Dev/Prod - [32 x 80]");

標題始終為“會話開發/產品” +更改的大小。

我需要找到以“ Session Dev / Prod”開頭的窗口。 有誰知道如何做到這一點。 還是有其他方法可以確定程序是否正在運行? 我嘗試使用Regex作為參數來執行此操作,但該函數僅接受字符串。

謝謝

我曾經執行一次任務來檢查程序是否正在運行(如果殺死,則將其殺死)並按以下方式解決它:

public static void isProcessRunning(String processName) throws IOException, InterruptedException {
 ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe");
 Process process = processBuilder.start();
 // handle errors: process.getErrorStream();

 BufferedReader reader = new BufferedReader(new  InputStreamReader(process.getInputStream()));
 String line;
 while ((line = reader.readLine()) != null) {
  if (line.startsWith(processName)) {
    System.out.println("Yes program is running");
    break;
  }
  // else {
  // System.out.println("No program is not running");
  // }
}

}

要在命令行中找到任務的名稱,請調用任務tasklist並查找名稱。 如果確實是'Session Dev / Prod-[32 x 80]',則可以將'​​Session Dev / Prod'用作字符串。但是請注意,這是Windows解決方案。 對於Linux,您必須使用ps -ef東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM