Page 1 sur 2
Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 11:09
par Ar-S
Suite à
ce topic, j'ai bien réussi à désactiver mon openwindowscreen lorsque la fenêtre de mon lecteur n'a plus le focus.
Seulement j'aimerai que cela se produise
uniquement lorsqu'un exe externe (de jeu par exemple) ouvre une fenêtre directx.
Je sais que certains antivirus y arrivent (il se mettent en mode basse conso de ressources lorsqu'un jeu est lancé).
Y'en a t ils parmi vous qui sachent comment procéder ?
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 11:32
par Backup
c'est vrais que je trouvais nul que ton Spectrum , disparaisse a la perte du Focus de ta fenetre
j'ai aussi éé confronté a ton probleme , lorsque j'ai vu que ça donnait comme toi une perte de l'affichage
du Screen lorsqu'on pert le focus , je suis revenu en arriere ....
je prefere que mon affichage continue, en arriere plan ...
pour un jeux plein ecran... ça reste un probleme..
System Mike Gyver ...
peut etre en testant le pixel du coin inferieur droit de l'ecran (du bureau )
lorsqu'on est en plein ecran Jeux, en general l'ecran deviens noir au moins une fois

alors que sinon , c'est la barre des taches

si tu ajoute la perte de focus, tu peut etre sur qu'un jeux a été lancé
(rhooooo ... chui trop fort

)
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 11:41
par Ar-S
Pas con ton idée de pixel même si pour être plus juste, j'opterai pour les 4 pixels des 4 angles car un utilisateur peu avoir sa barre sur les 4 cotés de son bureau. Si quelqu'un à une solution plus "noble" je suis tout de même preneur.
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 11:43
par Backup
Ar-S a écrit :Pas con ton idée de pixel
parceque tu supposes que d'habitude , mes idées sont con ?

Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 11:45
par Ar-S
Non je veux dire que lorsque tu ne radotes pas, tes idées sont bonnes, les médocs ont l'air de marcher

Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 13:01
par case
la barre des taches n'est pas toujours au même endroit j'en vois souvent sur le coté ou en haut de l’écran.
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 13:35
par Backup
oui , ben tester les 4 coins et faire une moyenne
ça tombe bien la moyenne de 0+0+0+0/4 = 0
ou mettre 4 conditions .... ou additioner les 4 couleurs

Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 13:57
par Backup
chez moi ça marche nickel !
si vous lancez un jeux plein ecran
vous entendrez le beep() grave
et un requester affichera fierement qu'un jeux est lancé
lorsque vous aurez quitté le plein ecran , un beep aigue se fera entendre
qui prouvera la detection
Code : Tout sélectionner
;***********************************************
;Titre :test si un Jeux est Lancé en plein ecran
;Auteur : Dobro
;Date :03/12/2013
;Heure :13:44:43
;Version Purebasic : PureBasic 5.21 LTS (Windows - x86)
;Version de l'editeur :EPB V2.52
; Libairies necessaire : Aucune
;***********************************************
Enumeration
#win
EndEnumeration
Declare Pxlcolor(X,Y)
global Flag
ExamineDesktops()
Hauteur = DesktopHeight(0)
Largeur= DesktopWidth(0)
OpenWindow(#win,100,100,100,100,"test",#PB_Window_SystemMenu)
mem_couleur=Pxlcolor(0,0) ; haut gauche
mem_couleur2=Pxlcolor(Largeur,0) ; haut droit
mem_couleur3=Pxlcolor(0,Hauteur) ;bas gauche
mem_couleur4=Pxlcolor(Largeur,Hauteur) ; Bas droit
repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
couleur=Pxlcolor(0,0) ; haut gauche
couleur2=Pxlcolor(Largeur,0) ; haut droit
couleur3=Pxlcolor(0,Hauteur) ;bas gauche
couleur4=Pxlcolor(Largeur,Hauteur) ; Bas droit
if couleur=mem_couleur and couleur2=mem_couleur2 and couleur3=mem_couleur3 and couleur4=mem_couleur4 and Flag=1
Flag=0
beep( 880,1000)
MessageRequester("info","pleine ecran quitté !! ")
Endif
if couleur+couleur2+couleur3+couleur4=<0
beep( 440,1000)
MessageRequester("info","Jeux lancé !! ")
Flag=1
Endif
Delay(20)
forever
Procedure Pxlcolor(X,Y)
handle=GetDC_(GetDesktopWindow_())
couleur=GetPixel_(handle,X,Y)
ReleaseDC_(GetDesktopWindow_(),handle )
ProcedureReturn couleur
EndProcedure
; EPB
j'attends la question suivante : "hey , mais comment on sait qu'on a quitté le jeux plein ecran ??"
reponse : Facile
il suffit de mettre en memoire les 4 couleurs qui etaient au 4 coins de l'ecran , avant le lancement du jeux
si ces couleurs se représentent a nouveau , c'est qu'on a quitté le mode plein ecran du jeux
(ceci a été ajouté dans le code

)
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 15:31
par Ar-S
En effet ça fonctionne par contre dans la boucle (de moa radio) ça génère un lag de fou. Surement du au GetPixel_ en boucle.
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 15:59
par Backup
bah oui
faut le mettre dans un Timer ... comme ça tu verifies si au bout de x secondes

(pas trop long hein )

Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 16:35
par Ar-S
Oui j'en ai déduis celà, seulement il me renvoie que FFFFFF cet âne.
J'ai tenté une approche de la sorte.
Tout d'abord 2 pixels opposées suffisent (en fait la barre sera toujours présente dans un angle opposée à l'autre)
Code : Tout sélectionner
Procedure.b CheckGame()
Protected c1.s , c2.s
HDC = GetDC_(0)
c1.s = RSet(Hex(GetPixel_(HDC,0,Hauteur)), 6, "0")
c2.s = RSet(Hex(GetPixel_(HDC,Largeur,0)), 6, "0")
Debug "C1 : " + c1
Debug "C2 : " + c2
If c1.s = "000000" And c2.s = "000000"
ProcedureReturn #GAME_ON
Else
ProcedureReturn #GAME_OFF
EndIf
EndProcedure
Me suis inspiré de
ce topic
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 17:02
par Ar-S
Je pense opter pour ton code, en fait il detecte bien le passage au noir. Me reste à gérer mes event avec ça.
(entre le fait que l'user puisse cacher l'affichage via le clique droit (sans fermer l'opanwindowsscreen) et du closescreen() qui doit se produire en plein ecran et revenir si la fenêtre a le focus, c'est un beau bordel).
Merci pour ton code en tout cas.

Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 17:31
par case
la fonction IsScreenActive() ca marche pas ?
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 17:39
par Ar-S
case a écrit :la fonction IsScreenActive() ca marche pas ?
Salut case,
Iscreen est pour une fenêtre PB non ? La on parle de detecter le lancement d'un jeu externe.
Comme ceux ci se lancent toujours via un ecran noir, c'est cet événement que l'on chope pour désactiver l'openwindowscreen de notre programme PB afin qu'il ne freeze pas.
Re: Comment détecter si un jeu externe est lancé ?
Publié : mar. 03/déc./2013 19:14
par Backup
case a écrit :la fonction IsScreenActive() ca marche pas ?
j'ajouterai que IsScreenActive() previen si on perd le focus ..
mais dans notre cas, ça ne nous est pas utile parceque
notre prg dispose d'un ecran
lorsqu'on perd le focus parcequ'une autre fenetre d'un autre prg le recupere
nous on veux pouvoir continuer a dessiner dedans ... jusque la ok
mais on veux pouvoir garder norte affichage si un prg de Jeux plein ecran est lancé !
ce qui se passe actuellement, c'est que si on lance un prg de jeux plein ecran
et qu'on quitte ce prg de jeux (ou bascule Alt+tab)
notre petit prg avec son petit ecran perd l'affichage !! sans raison au passage !
le petit prg fonctionne toujours , mais plus d'affichage sur son petit ecran ....
d'ou l'astuce de regarder si un prg prend le plein ecran (m'etonnerai pas qu'il existe une API pour ça au passge )