このプロジェクトには、Web ページのハイパーリンクを通じてローカル デスクトップ プログラムを起動するという要件があり、デスクトップ プログラムを繰り返し開く小さなバグがあります。ローカル デスクトップ プログラムが開いているかどうかを確認するには、インターフェイスをバックグラウンドで開く必要があります。以下の簡単な方法で実現できます。
指定したローカル パスでプログラムが実行されているかどうかを検出するには、Java ProcessBuilder クラスを使用します。サンプルコードは次のとおりです。
todesk リモート ソフトウェアを例に挙げます
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ProgramRunningCheck {
public static void main(String[] args) {
String programPath = "C:\Program Files (x86)\ToDesk\ToDesk.exe"; // 要检测的程序路径
if (isProgramRunning(programPath)) {
System.out.println(programPath + " is running.");
} else {
System.out.println(programPath + " is not running.");
}
}
public static boolean isProgramRunning(String programPath) {
boolean isRunning = false;
String os = System.getProperty("os.name").toLowerCase();
File programFile = new File(programPath);
String programName = programFile.getName();
try {
ProcessBuilder processBuilder;
if (os.contains("win")) {
// Windows系统
processBuilder = new ProcessBuilder("tasklist");
} else {
// 非Windows系统
processBuilder = new ProcessBuilder("ps", "-e");
}
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
if (line.contains(programName)) {
isRunning = true;
break;
}
}
reader.close();
inputStream.close();
process.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return isRunning;
}
}
試験結果
実装ロジックの説明:
ProcessBuilder
オペレーティング システム コマンドを実行して、実行中のプログラムのリストを取得するために使用します。Windowsシステムの場合はtasklist
コマンドでプログラムリストを取得し、Windows以外のシステムではps -e
コマンドでプログラムリストを取得します。次に、取得したプログラム リストをたどって、検出するプログラム名が含まれているかどうかを確認します。含まれている場合は、プログラムが実行されていることを意味します。
programPath
検出するプログラムのパスを指すように変数の値を実際の状況に応じて変更してください。