Faudrait que l'appli "fille" envoye un message convenu à l'application "mère" avant qu'elle ne se ferme. Les WM_USER (+0 à + 255 ?) sont faits pour ça.
Si ca peut servir, un bout de code (C, 16 bits, bon aussi en 32) que j'avais écrit pr savoir si la même appli tourne déja et lui donner l'ordre de se fermer.
void MetFinAIdem(void)
{
HWND hWnd;
long TL;
hWnd = GetTopWindow(NULL);
while (hWnd != NULL)
{
if (IsWindowVisible(hWnd) != 0 && IsWindowEnabled(hWnd) != 0)
{
/* On n'a ici que les noms de feuilles ppales "visibles"
Si on fait pas de test, on trouve aussi ce qui est en "arrière-plan" */
TL = GetWindowLong(hWnd, GWL_STYLE);
if ((TL & WS_POPUP) != WS_POPUP)
{ /* != WS_POPUP donne nom de titres de fenêtres
== WS_POPUP donne le nom des applications */
char WName[257];
WName[0] = '\0';
GetWindowText(hWnd, WName, sizeof(WName));
if (hWnd != hWndMain && (strstr(WName, szTitle) != NULL ||
strstr(WName, szAppName) != NULL))
{ // Envoie message à l'autre application
SendMessage(hWnd, WM_USER + 8, (WPARAM)0, (LPARAM)0);
}
}
}
hWnd = GetWindow(hWnd, GW_HWNDNEXT);
}
}
// fin de module MetFinAIdem
hWndMain est le hWnd de l'appli courante (peu utile ici car on charche pas un doublon mais un "étranger" )
szTitle est le titre de la barre de texte de la feuille principale de mon programme.
szAppName est le nom de baptême du programme.
Si l'on connait le nom du prog à maximiser (ou rendre "normal" ), suffit de prendre les bonnes chaînes. Le but est d'explorer les noms des progs qui tournent et savoir lequel est visé puis de lui envoyer un message "privé" convenu (ici WM_USER + 8 car les autres me servent déja).
C'est peut être pas clean, mais suis pas du métier.
Dans la boucle de test de message du prog "à maximiser quand fini", faut mettre
case WM_USER + 8:
// maximisation, ou remise comme avant
break;
J'espère que c'est pas trop obscur (??).