Attention ça ne marche pas sous Windows 64…
Il y a un truc pas mal sinon, c’est d’utiliser FindWindow.
C’est moins précis mais beaucoup plus portable, c’est pour le cas général. Attention tu peux juste déterminer que l’application tourne ce qui ne répond pas à ta question, j’en ai bien conscience (même problème avec la technique de Glop, qui, si elle te retourne un processs ID bien pratique pour faire un OpenProcess ne te permet pas de savoir quelle instance d’application est “la bonne”).
Dans ton cas spécifique tu dis vouloir identifier ton application qui tourne et communiquer avec elle, pour cela je te recommande de créer un objet de synchronisation, par exemple un mutex avec CreateMutex, au démarrage de ton application et de vérifier son existence. Tu fais d’une pierre deux coups car tu pourras utiliser cet objet pour synchroniser les communications entre tes deux processus :
Dans ton application principale :
[code]HANDLE hMutex = ::CreateMutex(NULL, FALSE, _T(“mymutexomg”));
if (hMutex)
return 0; // wtf ?!
::CloseHandle(hMutex);
hMutex = NULL;[/code]
Dans ton application souhaitant y accéder :
[code]HANDLE hClientMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, _T(“mymutexomg”));
if (!hClientMutex)
return 0;// non présent
::CloseHandle(hClientMutex);
hClientMutex = NULL;[/code]
Ensuite il te suffira d’accéder à la ressource partagée pour communiquer avec ton programme. Tu peux utiliser directement CreateNamedPipe d’ailleurs, ça t’économise le mutex.
Si ton application est multi-instances il va falloir que tu réfléchisses un système de communication un peu plus élaboré avec un processus maître et des processus esclaves.