Le projet a besoin de réveiller le programme de bureau local via un lien hypertexte de page Web, et il y a un petit bogue qui ouvre à plusieurs reprises le programme de bureau. Une interface doit être ouverte en arrière-plan pour déterminer si le programme de bureau local est ouvert. Il peut être réalisé par la méthode simple suivante.
Pour détecter si un programme s'exécute sous le chemin local spécifié, vous pouvez utiliser la classe Java ProcessBuilder pour y parvenir. Voici un exemple de code :
Prenons l'exemple du logiciel distant 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;
}
}
Résultats de test
Description de la logique de mise en œuvre :
Utilisez-le
ProcessBuilder
pour exécuter une commande du système d'exploitation afin d'obtenir une liste des programmes en cours d'exécution. Dans le système Windows, utiliseztasklist
la commande pour obtenir la liste des programmes ; dans le système non-Windows, utilisezps -e
la commande pour obtenir la liste des programmes.Ensuite, parcourez la liste de programmes obtenue pour déterminer si le nom du programme à détecter est inclus, et s'il est inclus, cela signifie que le programme est en cours d'exécution.
Veuillez modifier
programPath
la valeur de la variable en fonction de la situation réelle afin qu'elle pointe vers le chemin du programme à détecter.