j'ai eu quelque soucis avec et je l'ai modifié.
Voici la nouvelle version :
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.40
;
; Explication du programme :
; Détection d'une fenêtre plein écran
Procedure FullScreenWindowDetected()
Protected Window, DesktopWindow, Detected, WindowRect.RECT
Structure Structure_Monitor
Size.l
Screen.RECT
WorkArea.RECT
Principal.l
EndStructure
Protected Monitor.Structure_Monitor, MonitorID
Monitor\Size = SizeOf(Structure_Monitor)
DesktopWindow = FindWindow_(0, "Program Manager")
MonitorID = MonitorFromWindow_(DesktopWindow, 0)
If MonitorID
GetMonitorInfo_(MonitorID, @Monitor)
Window = FindWindow_(0, 0)
While Window
If Window <> DesktopWindow
Style = GetWindowLongPtr_(Window, #GWL_STYLE)
If Style & #WS_VISIBLE
GetWindowRect_(Window, @WindowRect)
If WindowRect\left <= Monitor\Screen\left And WindowRect\top <= Monitor\Screen\top And WindowRect\right >= Monitor\Screen\right And WindowRect\bottom >= Monitor\Screen\bottom
Detected = Window
Break
EndIf
EndIf
EndIf
Window = GetWindow_(Window, #GW_HWNDNEXT)
Wend
EndIf
ProcedureReturn Detected
EndProcedure
If OpenWindow(0, 0, 0, 256, 48, "Plein écran", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) = 0
End
EndIf
StickyWindow(0, 1)
TextGadget(0, 0, 0, 256, 48, "")
AddWindowTimer(0, 1, 250)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Timer
Select EventTimer()
Case 1
; Forcer toujours au dessus
If WindowFromPoint_(WindowX(0) | WindowY(0) << 32) <> WindowID(0)
BringWindowToTop_(WindowID(0))
EndIf
; Test
Window = FullScreenWindowDetected()
If Window
Texte.s = Space(255)
GetWindowText_(Window, @Texte, 255)
SetGadgetText(0, "Un programme actif est en plein écran : " + Chr(10) + Texte)
Else
SetGadgetText(0, "Aucun programme actif n'est en plein écran")
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow