Détecter qu'une application est en plein écran

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Détecter qu'une application est en plein écran

Message par lionel_om »

Bonjour,

Je voudrais savoir si y'a un moyen de détecter si une application est en plein écran (full screen), genre un jeu, un lecteur de vidéos, un diaporama...

Merci d'avance
Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'ai trouvé ce code là (adapté d'un forum VB France).

Code : Tout sélectionner

Procedure IsSimpleFullscreenWindow()
  Protected hWnd.l, r.RECT
  hWnd = GetForegroundWindow_()
  If ( GetWindowLong_(hWnd, #GWL_STYLE) & (#WS_MAXIMIZEBOX | #WS_MINIMIZEBOX | #WS_SYSMENU) ) = 0
    GetWindowRect_(hWnd, @r)
    If r\Bottom - r\Top >= GetSystemMetrics_(#SM_CYSCREEN) Or r\Right - r\Left >= GetSystemMetrics_(#SM_CXSCREEN)
      ProcedureReturn #True
    EndIf
  EndIf
EndProcedure
Si personne n'a mieux je vais utiliser celui là. Dans le cas contraire je suis preneur !
Lio :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour je pense que tu trouveras plus simple ce bout de code !

Code : Tout sélectionner

Zoom = IsZoomed_(GetForegroundWindow_())
La variable Zoom est Vrai (1) si la fenetre est maximisée ou Fausse (0) si ce n'est pas le cas !


Et un exemple pour tester :

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
  #Button_1
EndEnumeration
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 200, 200, 400, 200, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_MaximizeGadget )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 70, 50, 100, 30, "Maximise")
      ButtonGadget(#Button_1, 70, 90, 100, 30, "Est-ce Max")
    EndIf
  EndIf
EndProcedure
Open_Window_0()
Repeat
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
      If IsZoomed_(GetForegroundWindow_()) 
        ShowWindow_(GetForegroundWindow_(),#SW_NORMAL)
        SetGadgetText(#Button_0,"Maximise")
      Else
        ShowWindow_(GetForegroundWindow_(),#SW_MAXIMIZE)
        SetGadgetText(#Button_0,"Retour normal")
      EndIf
    ElseIf GadgetID = #Button_1
      Zoom= IsZoomed_(GetForegroundWindow_())
      If Zoom
        MessageRequester("État de la fenetre", "La fenetre est maximisée")
      Else
        MessageRequester("État de la fenetre", "La fenetre n'est pas maximisée")
      EndIf
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End
Dernière modification par brossden le ven. 02/nov./2007 10:11, modifié 1 fois.
Denis

Bonne Jounée à tous
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Je viens d'essayer vos deux codes, et aucun ne fonctionne, par exemple lorsque
je lance un code Dreamotion3D en FullScreen, les deux fonctions retourne malgrés
tout toujours 0
:?
Force et sagesse...
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Pour tmyke

teste l'exemple que j'ai inclus tu verras normalement que cela fonctionne bien !

Je suis en windows XP Pro et Purebasic V 4.10 Beta 2
Denis

Bonne Jounée à tous
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Oui tu as raison, mais tu es toujours en mode fenetré, pas vraiment en Fullscreen.

lionel_om disait initalement
lionel_om a écrit :...
Je voudrais savoir si y'a un moyen de détecter si une application est en plein écran (full screen),
genre un jeu, un lecteur de vidéos, un diaporama...
...
et dans ce cas la, vos code ne semble pas etre fiable à 100%... (exemple
codes DM3D en FullScreen).
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tmyke a écrit :Oui tu as raison, mais tu es toujours en mode fenetré, pas vraiment en Fullscreen.

lionel_om disait initalement
lionel_om a écrit :...
Je voudrais savoir si y'a un moyen de détecter si une application est en plein écran (full screen),
genre un jeu, un lecteur de vidéos, un diaporama...
...
et dans ce cas la, vos code ne semble pas etre fiable à 100%... (exemple
codes DM3D en FullScreen).
ben oui ! mais a ma connaissance on ne peut pas lancer un mode Screen autrement qu'en plein ecran !!!

sinon c'est pas du Screen c'est du WindowScreen !! :)
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

ok pour Fullscreen !

Nouveau code :

Code : Tout sélectionner

RunProgram("c:\MonPPS.pps")
Delay(2000)
Global hwnd.l, r.RECT
hwnd = GetForegroundWindow_()
GetWindowRect_(hwnd, @r)
ExamineDesktops()
If  r\top+r\bottom = DesktopHeight(0) And r\left+r\right = DesktopWidth(0)
  MessageRequester("Etat de la fenettre","Fullscreen")
Else
  MessageRequester("Etat de la fenettre","Fenêtré")
EndIf
Il faut bien evidement avoir un pps à afficher et mettre le bon nom d fichier dans RunProgram
Denis

Bonne Jounée à tous
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

ton dernier code fonctionne mieux, en tous les cas dans le cas d'appli DirectX en Fullscreen,
j'ai cette fois la bonne valeur.
Force et sagesse...
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Merci brossden pour tes codes.
Par contre je cherchais un code qui ne considérait pas l'explorateur Windows comme une fenêtre par exemple.

En fait j'en ai besoin pour un programme qui tourne en background et qui peut-être mis en veille qd on lance un jeu ou autre (pour ne pas ralentir une grosse application). Donc, je ne peux pas juste tester la taille de la fenêtre.

Je vais tout de même faire quelques tests avec tes deux codes et voir cet fonction de l'API Windows.

Merci bien de votre aide.
Lio :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Il te suffit de faire un thread ce qui ne consomme partiquement pas de ressource !
Denis

Bonne Jounée à tous
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

En fait je suis en train de faire un programme pour changer le WallPaper du bureau. Et donc je voudrais qu'il se mette en pause quand un jeu ou un film est lancé en plein écran. Car j'ai vu qu'avec Media Player Classic, lors d'un changement de WallPaper, certaines vidéos posent des problèmes d'affichage.

Donc le programme en lui même ne consomme rien en ressource, sauf lors du changement d'image : conversion d'un JPG en BMP (avec redimension si format portait).

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

alors justement teste si une appli est plein ecran ou maximisée avant de faire un changement de papier peint ! et tu n'auras pas ce problème !
Donne nous du code pour que l'on puisse t'aider !
Denis

Bonne Jounée à tous
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Ma fonction actuelle est ainsi :

Code : Tout sélectionner

Procedure IsSimpleFullscreenWindow()
  Protected hWnd.l, r.RECT, txt.s
  hWnd = GetForegroundWindow_()
  If ( GetWindowLong_(hWnd, #GWL_STYLE) & (#WS_MAXIMIZEBOX | #WS_MINIMIZEBOX | #WS_SYSMENU) ) = 0
    GetWindowRect_(hWnd, @r)
    If r\Bottom - r\Top >= GetSystemMetrics_(#SM_CYSCREEN) Or r\Right - r\Left >= GetSystemMetrics_(#SM_CXSCREEN)
      txt = Space (256)
      GetWindowText_ (hwnd, txt, 256)
      If txt <> "Program Manager" And txt <> #NULL$
        ProcedureReturn #True
      EndIf
    EndIf
  EndIf
EndProcedure
Ça semble pas trop mal marcher, mais c'est sans doute perfectible. Mais je préfère que le "diaporama" continu alors qu'un jeu est lancé plutôt que le diaporama ne cesse de s'arrêter.

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre