[英]Java JNA FindWindow() - Error looking up function 'FindWindow': The specified procedure could not be found
[英]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.