Je sous sous Delphi 6 Personal Edition, et Windows 10 toutes mises à jour installées.

Je me suis heurté au problème suivant:
comment savoir si une de mes applications Delphi, dont je connais le handle de la form principale (comment, ce n'est pas le sujet ici) est actuellement en état normal, minimisé ou maximisé ?

Pour l'état maximisé, l'API IsZoomed fonctionne bien. par contre, l'API IsIconic ne marche pas avec ma version de Delphi, car il retourne toujours FALSE, même si l'application a été minimisée.

J'ai fini par trouver une astuce qui semble marcher dans tous les cas. J'aimerais bien que vous puissiez me dire si ma réflexion est bonne ou si j'ai manqué quelque chose.

Voici la fonction quue j'ai créée pour tester cela (fonction intégrée dans une DLL):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function GetCurrentWindowState(hnd: HWND): integer; stdcall; export;
var
  rct: TRect;
  xhnd: HWND;
begin
  result := -1;
  try
    GetWindowRect(hnd,rct);
    xhnd := WindowFromPoint(rct.TopLeft);
                      result := 0;
    if IsIconic(hnd)   then result := 1;   // <==== retourne toujours FALSE !
    if xhnd<>hnd      then result := 1;   // <==== ici, mon test semble fonctionner...
    if IsZoomed(hnd)  then result := 2;
  except
  end;
end;
exports GetCurrentWindowState;
La fonction retourne:
-1 si le handle est invalide
0 si la fenêtre et en état normal
1 si la fenêtre est minimisée
2 si la fenêtre est maximisée

MEerci d'avance pour votre jugement !