L'API "isZoomed" renvoie toujours FALSE pour le handle d'un objet DirectX, par contre GetWindowRect est correct... Mais n'oubliez pas qu'une application en DirectX change souvent la résolution d'écran. Fort heureusement, l'objet Screen contient la nouvelle résolution :o)
Toutefois, j'ai remarqué que, dans un Timer - rapide -, l'objet Screen renvoie occasionnellement des valeurs incorrectes, même si la résolution ne change pas !!! :o.
Du coup, pour détecter si il n'y a pas d'applis maximisées ou en plein écran, il faut inverser le problème comme ci-dessous :
If (foreappCLASS = "Progman") Then
' On ignore Progman
ElseIf (IsZoomed(foreappHWND)) Then
' On ignore les app maximisées
ElseIf ((foreappRect.Left <= 0) And (foreappRect.Top <= 0) And (foreappRect.Right >= (Screen.Width / Screen.TwipsPerPixelX)) And (foreappRect.Bottom >= (Screen.Height / Screen.TwipsPerPixelY))) Then
' On ignore les app plus grande que l'écran
Else
YMate.ShowYMate Menu_YMateToujoursVisible.Checked
End If
NB: je doute que çà marche avec un ordi en multi-ecran.
Autrechose, si je faisais le test comme ci-dessous en remplaçant les divisions par des multiplications (beaucoup plus rapide), j'ai parfois des bugs :o(
((foreappRect.Bottom * Screen.TwipsPerPixelY) >= Screen.Height)
J'ai cru devenir dingue, mais maintenant çà marche, et les petits compagnons coquins de Y!MPlus n'empeche plus de jouer :o))
Dico pour les newbies:
ScreenMate=Personnage accroché à l'ecran ou au curseur de la souris
TopMost=Objet qui s'affiche toujours par dessus les autres fenêtres, même quand il n'a pas le focus.
Y!M Plus=Plugin non officiel pour Yahoo! Messenger, anciennement appelé Yahoo! Plus (à lépoque du Labo de VBFrance) puis Y! Messenger Plus (avant la migration sur SourceForge).
Le mode SuperTopMost créé dans Y!M Plus permet d'etre toujours par dessus les autres fenêtres, et aussi par dessus tous les autres objets en TopMost... Un bordel sans nom pour la mise au point :o|
Olivier D. alias ze kat =(°o°)=
[ Lien ]