O projeto tem um requisito para ativar o programa de área de trabalho local por meio de um hiperlink de página da Web, e há um pequeno bug que abre repetidamente o programa de área de trabalho. Uma interface precisa ser aberta em segundo plano para determinar se o programa da área de trabalho local está aberto. Isso pode ser alcançado pelo seguinte método simples.
Para detectar se um programa está sendo executado no caminho local especificado, você pode usar a classe Java ProcessBuilder para obter. Aqui está um código de exemplo:
Tome o software remoto todesk como exemplo
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;
}
}
Resultado dos testes
Descrição da lógica de implementação:
Use
ProcessBuilder
para executar um comando do sistema operacional para obter uma lista de programas em execução. No sistema Windows, usetasklist
o comando para obter a lista de programas; no sistema não Windows, useps -e
o comando para obter a lista de programas.Em seguida, percorra a lista de programas obtida para determinar se o nome do programa a ser detectado está incluído e, se estiver incluído, significa que o programa está em execução.
Modifique
programPath
o valor da variável de acordo com a situação atual para que aponte para o caminho do programa a ser detectado.