Page 1 sur 1

Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 11:30
par Le Soldat Inconnu
Salut,

Un petit exemple pour ajouter une ProgressBar sur l'icône de la barre des tâches d'une fenêtre.
Uniquement pour Windows 7 et plus

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Barre de progression sur l'icone dans la barre des tâches

Procedure SetProgressTaskBar(hWnd, State)
	; State = 0 : Pas de barre de progression
	; State = 1 : Barre de progression uniquement pour afficher une activité sans indiqué de % de progression
	; State = 2 : Barre de progression normale
	; State = 4 : Arrêt de la progression à cause d'une erreur
	; State = 8 : Progression en pause, attente de l'utilisateur
	
	Interface ITaskbarList3 Extends ITaskbarList2 
		SetProgressValue(hWnd, ullCompleted.q, ullTotal.q) 
		SetProgressState(hWnd, tbpFlags.l) 
		RegisterTab(hWndTab, hWndMDI) 
		UnregisterTab(hWndTab) 
		SetTabOrder(hWndTab, hWndInsertBefore) 
		SetTabActive(hWndTab, hWndMDI, dwreserved.l) 
		ThumbBarAddButtons(hWnd, cButtons.l, *pButton ) 
		ThumbBarUpdateButtons(hWnd,cButtons.l, *pButton) 
		ThumbBarSetImageList(hWnd, himl) 
		SetOverlayIcon(hWnd, hIcon, pszDescription.p-bstr) 
		SetThumbnailTooltip(hWnd, pszTip.p-bstr) 
		SetThumbnailClip(hWnd, *prcClip.RECT) 
	EndInterface 
	
	Protected TBL.ITaskbarList3
	
	If OSVersion() >= #PB_OS_Windows_7
		CoInitialize_(0)
		If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @TBL) = #S_OK
			TBL\HrInit()
			TBL\SetProgressState(hWnd, State)
			TBL\Release()
		EndIf
		CoUninitialize_()
	EndIf
	
	DataSection
		CLSID_TaskBarList:
		Data.l $56FDF344
		Data.w $FD6D, $11D0
		Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
		IID_ITaskBarList3:
		Data.l $EA1AFB91
		Data.w $9E28, $4B86
		Data.b $90, $E9, $9E, $9F, $8A, $5E, $EF, $AF
	EndDataSection
EndProcedure

Procedure SetProgressTaskBarValue(hWnd, Completed.q, Total.q)

	Protected TBL.ITaskbarList3
	
	If OSVersion() >= #PB_OS_Windows_7
		CoInitialize_(0)
		If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @TBL) = #S_OK
			TBL\HrInit()
			TBL\SetProgressValue(hWnd, Completed, Total)
			TBL\Release()
		EndIf
		CoUninitialize_()
	EndIf

EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Progression", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
  End
EndIf

TextGadget(0, 0, 0, 300, 16, "Bare de progression sur l'icône de la barre des tâches :")
ComboBoxGadget(1, 0, 16, 300, 24)
AddGadgetItem(1, -1, "Aucune barre de progression")
AddGadgetItem(1, -1, "Barre de progression pour indiquer une activité")
AddGadgetItem(1, -1, "Barre de progression normale")
AddGadgetItem(1, -1, "Barre de progression : Erreur")
AddGadgetItem(1, -1, "Barre de progression : En pause")
SetGadgetState(1, 0)
TrackBarGadget(2, 0, 40, 300, 32, 0, 100)
SetGadgetState(2, 50)
HideGadget(2, 1)

Repeat
  Event = WaitWindowEvent()
  
  Select Event 
		Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
				Case 1
					Position = GetGadgetState(1)
					If Position >= 0 And Position <> GetGadgetData(1)
						
						HideGadget(2, 1)
						
						Select Position
							Case 0
								SetProgressTaskBar(WindowID(0), 0)
								
							Case 1
								SetProgressTaskBar(WindowID(0), 1)
								
							Case 2
								SetProgressTaskBar(WindowID(0), 2)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
							Case 3
								SetProgressTaskBar(WindowID(0), 4)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
							Case 4
								SetProgressTaskBar(WindowID(0), 8)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
						EndSelect
						
						SetGadgetData(1, Position)
					EndIf
					
				Case 2
					SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
			EndSelect
	EndSelect
  
Until Event = #PB_Event_CloseWindow

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 11:36
par falsam
Pas mal du tout !!!!! Merci pour ce partage

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 12:33
par venom
Wouahh génial ce code 8)
Merci LSI c'est très pratique :wink:






@++

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 12:34
par Droopy
Merci, ça peut être utile. :D

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 12:57
par Le Soldat Inconnu
Est-ce que quelqu'un peut lancer ce code sur Window XP ou Vista pour vérifier qu'il ne plante pas ? (Mais il ne va rien se passer car la fonction n'est que pour 7)

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 13:04
par GallyHC
Bonjour,

Je viens de le compiler sur XP et apar qu'il ne ce passe pas grand chose au changement de la combobox, il n'y a pas d'erreur qui sont générés.

Cordialement,
GallyHC

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 16:16
par nico
Fonctionne nickel, tester sur window 7

Re: Barre de progression sur l'icône de la barre des tâches

Publié : sam. 28/mai/2011 20:52
par Ar-S
Merci c'est excellent.

Re: Barre de progression sur l'icône de la barre des tâches

Publié : dim. 29/mai/2011 22:23
par Atomo
Merci pour le code, ça a l'air de fonctionner :)

Re: Barre de progression sur l'icône de la barre des tâches

Publié : lun. 30/mai/2011 9:10
par Kwai chang caine
Le Soldat Inconnu a écrit :Est-ce que quelqu'un peut lancer ce code sur Window XP ou Vista pour vérifier qu'il ne plante pas ? (Mais il ne va rien se passer car la fonction n'est que pour 7)
Exact...tout va bien du coté de VISTA....y se passe rien :D