A ma connaissance, il n'y a pas d'API de base en Java pour consulter la liste des processus actifs sur le système.
Que souhaites-tu faire avec cet autre logiciel ? Est-ce que tu veux vraiment juste savoir s'il est lancé ou non, ou bien comptes-tu communiquer avec ?
Si ton but est au final de communiquer avec, il vaudrait mieux te pencher sur des techniques classiques d'IPC (Interprocess communication). Suivant le système et ce que tu veux faire, il y a plusieurs gandes familles de solutions qui vont dans ce sens :
- Communication via TCP/IP ou UDP/IP avec des sockets
- Communication via des pipes nommées ou anonymes (je n'ai jamais utilisé de pipes nommées en Java mais ça doit sûrement pouvoir se faire, ça existe autant sous UNIX que sous windows)
- Sous windows, Microsoft Component Object Model (COM) (Voir la bibliothèque COM4J)
- Sous windows toujours, SendMessage et WM_COPYDATA (obligé d'utiliser JNA pour y avoir accès)
- Si c'est un logiciel tournant sur une autre JVM, Java propose RMI
- Si c'est plus orienté hardware, il y a SNMP
Si c'est un logiciel dont tu contrôles le code, tu pourrais mettre en place l'une de ces solutions. Si c'est un logiciel propriétaire dont tu ne contrôles pas le code, peut-être qu'il met déjà une de ces solutions à ta disposition.
Par exemple:
- On peut communiquer avec les logiciels de la suite Microsoft Office, avec Internet Explorer, ou beaucoup d'autres logiciels windows en utilisant COM.
- Quelques logiciels proposent une interface de contrôle web et donc on peut s'y connecter avec des sockets TCP et quelques bases de protocole HTTP, ou des services web SOAP, XMLRPC, CORBA… Java a tout ce qu'il faut en natif pour le faire sans trop de difficulté normalement.
- Il fut un temps ou il était possible de communiquer avec skype par socket sous UNIX et par WM_COPYDATA sous windows.
- etc.
Si tu ne souhaites pas entrer en communication avec le logiciel mais, rééellement, uniquement savoir s'il est lancé ou non, alors là, effectivement, tu n'as pas trop le choix :
- Soit tu es sous UNIX et tu appelles le programme ps, avec ProcessBuilder typiquement, probablement plus simple que de fouiller dans les tréfonds du kernel (mais avec JNA tu pourrais aussi faire des appels système si tu veux t'amuser)
- Soit tu es sous windows et tu appelles les fonctions de l'API windows en utilisant une interface FFI comme JNA. Voir les functions EnumProcesses, OpenProcess et GetProcessImageFileName pour récupérer une liste de processus actuellement lancés et leurs noms.