[API Windows] Lire la valeur d'une barre de progression ?
Publié : jeu. 28/juil./2011 12:18
Bonjour,
Pour faire une farce à un collègue, j'ai eu une idée mais je ne sais pas si c'est réalisable.
Voilà l'idée:
1 - Pendant qu'il est absent, je lui mets dans son groupe de démarrage un petit programme PB qui tourne en mode "invisible".
2 - Ce programme scanne régulièrement toutes les fenêtres ouvertes dans Windows à la recherche d'un type de gadget particulier (les barres de progressions, en l'occurrence).
3 - Si le programme trouve un gadget de ce type, j'affiche par dessus une petite image rigolote, qui se déplace en même temps que la barre progresse.
4 - Moultes LoLeries
Voilà où j'en suis (une grosse partie de ce code a été trouvé dans ce forums, donc merci aux auteurs).
Qui pourra me dire comment récupérer la valeur d'une progress bar dans l'API Windows ?
Pour faire une farce à un collègue, j'ai eu une idée mais je ne sais pas si c'est réalisable.
Voilà l'idée:
1 - Pendant qu'il est absent, je lui mets dans son groupe de démarrage un petit programme PB qui tourne en mode "invisible".
2 - Ce programme scanne régulièrement toutes les fenêtres ouvertes dans Windows à la recherche d'un type de gadget particulier (les barres de progressions, en l'occurrence).
3 - Si le programme trouve un gadget de ce type, j'affiche par dessus une petite image rigolote, qui se déplace en même temps que la barre progresse.
4 - Moultes LoLeries
Voilà où j'en suis (une grosse partie de ce code a été trouvé dans ce forums, donc merci aux auteurs).
Qui pourra me dire comment récupérer la valeur d'une progress bar dans l'API Windows ?
Code : Tout sélectionner
EnableExplicit
; Enumère les fenêtres filles
Procedure.l EnumChildWindowProc(hwnd.l, hParentWnd.l)
Protected classe.s, chaine.s, rc.RECT
Protected windowX.w,windowY.w,windowWIDTH.w,windowHEIGHT.w
Protected chaine_coords.s
If GetParent_(hWnd) = hParentWnd
classe=Space(100)
chaine=Space(255)
GetClassName_(hwnd, @classe, 100)
GetWindowText_(hwnd,@chaine,255)
GetWindowRect_(hwnd,@rc)
windowX = rc\left
windowY = rc\top
windowWIDTH = rc\right-rc\left
windowHEIGHT = rc\bottom-rc\top
chaine_coords = Str(windowX)+","+Str(windowY)+","+Str(windowWIDTH)+","+Str(windowHEIGHT)
If classe = "msctls_progress32"
GetWindowText_(hParentWnd,@chaine,255)
Debug " Progress bar trouvée : "
Debug " Fenêtre : " + chaine
Debug " Position: " + Str(windowX)+","+Str(windowY)
Debug " Taille : " + Str(windowWIDTH)+","+Str(windowHEIGHT)
Debug " J'ai trouvé la Progress Bar, mais comment je récupère sa valeur ?"
EndIf
EndIf
EndProcedure
; Parcourt toutes les fenêtre visibles
Procedure listWindows()
Protected hwnd.l
hWnd = FindWindow_( 0, 0 )
While hWnd <> 0
If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
If GetWindowLong_(hWnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
EnumChildWindows_(hWnd, @EnumChildWindowProc(),hWnd)
EndIf
EndIf
hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
Wend
EndProcedure
; Créer une fenêtre avec une barre de progression, pour le test
OpenWindow(0,0,0,320,200,"test progress bar")
ProgressBarGadget(1,5,5,200,20,0,100)
SetGadgetState(1,53) ; je la positionne arbitrairement à 53, juste pour le test
; Et là, je pars à sa recherche dans les fenêtres de Windows
listWindows()