Afficher une application en cours quand on clique sur son exécutable pour la lancer une 2ème fois
Bonjour tout le monde,
J'ai beau cherché mais je n'ai pas trouvé comment je peux afficher la fenêtre principale de mon application lorsqu'on veut la lancer une 2ème fois par clic sur son exéctuable.
J'ai réussi à détecter que l'application est déjà encours d'exécution et ce en parcourant la liste des processus Windows et en vérifiant par le nom de l'exécutable :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
char processName[MAX_PATH];
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i=0;
//Enumeration des process
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return 0;
// Calcul du nombre des process.
cProcesses = cbNeeded / sizeof(DWORD);
while ((i < cProcesses))
{
if( aProcesses[i] != 0 )
{
// Ouverture process
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ, FALSE, aProcesses[i] );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded))
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
}
// Fermeture du HANDLE.
CloseHandle( hProcess );
WideCharToMultiByte(CP_ACP, NULL, szProcessName,MAX_PATH,processName,MAX_PATH, NULL, NULL);
if(!strcmp( processName,monProcess))
{
nbProc++;
/// HB 02/07/2018 : set pidAutonome : on est sure qu'il y a 2 autonome => pas besoin de parcourir le reste(nbProc ++ )
qDebug() << "nbProc "<< nbProc <<"# pid " <<aProcesses[i] << "# pid autonome courant "<<GetCurrentProcessId();
if(aProcesses[i] != GetCurrentProcessId())
{
pidAutonome = aProcesses[i];
}
/// END
}
}
i++;
}
return nbProc; |
Est ce quelqu'un a une idée comment compléter ce code ou a une autre solution à me fournir ?
Merci d'avance.
Bien cordialement.