Comment detecter si il y a une app en directx

cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008 - 27 nov. 2006 à 12:30
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008 - 28 nov. 2006 à 12:26
C'est pour le projet Y!M Plus, j'ai un screenmate avec un mode super-top-most. Evidemment, j'ai pris quelques dispositions pour ne pas cacher des menu popup, les tooltips, et les applications maximisées ou en plein ecran.

Malheureusement, les API de Windows (IsZoomed et GetWindowRect) ne semblent pas marcher pour des handles associés à une fenetre en mode DirectX

Existe t'il un moyen de savoir si il y a une application en mode DirectX en cours d'execution ? ou de savoir si un handle correspond a une application en mode DirectX

Le code source de Y!M Plus est disponible sur SourceForge ;o)

Olivier D. alias ze kat  =(°o°)=
http://360.yahoo.com/olie_ze_kat

3 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 nov. 2006 à 12:58
Tout celà me parait fort clair !
Et si tu recommençais en t'exprimant en langage normal et sans références à des méthodes ou des outils comme "un screenmate", un mode "mode super-top-most",  etc... ni même à "le projet Y!M Plus" (dont je ne suis pas censé avoir entendu parler)
En bref : une chose bien comprise s'exprime beaucoup plus clairement (et beaucoup plus simplement)... en tout état de cause : sans jargon ni nécessité d'être un "initié" (histoire de voir si tu sais exactement de quoi tu parles et, si tel est le cas, de pemettre à ceux qui "ne sont pas dans ton secret", de te suivre sans avoir à chercher partout ce que tu as voulu exprimer mais n'as pas exprimé.

Je te suggère donc de bien vouloir recommencer, en exprimant ton problème par rapport à VB6 et sans tout cet étalage de références qui conduisqent la plupart à aller chercher de quoi tu parles...

Merci (en tout cas de la part du "vieux").de ml'effort élémentaire qu'il te sera possible de faire dans ce sens sur ce forum.
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
27 nov. 2006 à 14:38
jmfmarques >> ne piques pas la mouche comme ça , je trouve cela assez compréhensible son problème (meme si j'ai toujours pas compris screenmate et je ne sais pas ce qu'est y!m plus,peut etre yahoo messenger plus).

Enfin sinon je n'ai pas de réponse à ta question, en effet c'est bizarre qu'une fenetre en mode directx ne supporte pas ces 2 api, la réponse m'interesse en tout cas.

Peux tu préciser pourquoi tu penses que "cela ne semble pas marcher ?" (qu'obtiens-tu après l'appel de ces api).

Ciaò
- MadMatt -
Vb System Library<
0
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
28 nov. 2006 à 12:26
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°)=
http://360.yahoo.com/olie_ze_kat
0
Rejoignez-nous