Jahre später ...
Hier mal meine Implementation, hab die Progress-Werte auf 0 - 100 festgesetzt.
Code: Alles auswählen
EnableExplicit
#TBPF_NOPROGRESS = $0
#TBPF_INDETERMINATE = $1
#TBPF_NORMAL = $2
#TBPF_ERROR = $4
#TBPF_PAUSED = $8
Interface ITaskbarList3 Extends ITaskbarList2
SetProgressValue.i(hWnd.i, ullCompleted.q, ullTotal.q)
SetProgressState.i(hWnd.i, tbpFlags.l)
RegisterTab.i(hWndTab.i, hWndMDI.i)
UnregisterTab.i(hWndTab.i)
SetTabOrder.i(hWndTab.i, hWndInsertBefore.i)
SetTabActive.i(hWndTab.i, hWndMDI.i, tbatFlags.l)
ThumbBarAddButtons.i(hWnd.i, cButtons.l, *pButton)
ThumbBarUpdateButtons.i(hWnd.i, cButtons.l, *pButton)
ThumbBarSetImageList.i(hWnd.i, himl.i)
SetOverlayIcon.i(hWnd.i, hIcon.i, pszDescription.s)
SetThumbnailTooltip.i(hWnd.i, pszTip.s)
SetThumbnailClip.i(hWnd.i, *prcClip)
EndInterface
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
Procedure TaskBarProgress(hWnd, flag = #TBPF_NORMAL)
Protected ptl.ITaskbarList3
If OSVersion() >= #PB_OS_Windows_7
CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @ptl)
If ptl
ptl\HrInit()
ptl\SetProgressValue(hWnd, 0, 100)
ptl\SetProgressState(hWnd, flag)
EndIf
EndIf
ProcedureReturn ptl
EndProcedure
Procedure TBP_SetState(hWnd, ptl.ITaskbarList3, state)
If ptl
Select state
Case #TBPF_NOPROGRESS, #TBPF_INDETERMINATE, #TBPF_NORMAL, #TBPF_ERROR, #TBPF_PAUSED
ptl\SetProgressState(hWnd, state)
EndSelect
EndIf
EndProcedure
Procedure TBP_SetValue(hWnd, ptl.ITaskbarList3, value)
If ptl
If value < 0 : value = 0 : EndIf
If value > 100 : value = 100 : EndIf
ptl\SetProgressValue(hWnd, value, 100)
EndIf
EndProcedure
Procedure TBP_Release(ptl.ITaskbarList3)
If ptl
ptl\Release()
ptl = 0
EndIf
EndProcedure
; example
Define TBP, progress, pause = 1
Define hIcon = ExtractIcon_(GetModuleHandle_(0), #PB_Compiler_Home + "PureBasic.exe", 0)
OpenWindow(0, #PB_Ignore, #PB_Ignore, 265, 30, "Example", #PB_Window_SystemMenu)
SendMessage_(WindowID(0), #WM_SETICON, 0, hIcon)
ButtonGadget(0, 5, 5, 80, 20, "start")
ButtonGadget(1, 90, 5, 80, 20, "stop")
ButtonGadget(2, 175, 5, 80, 20, "pause")
TBP = TaskBarProgress(WindowID(0), #TBPF_NOPROGRESS)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
TBP_Release(TBP)
DestroyIcon_(hIcon)
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; start
AddWindowTimer(0, 1, 100)
Case 1 ; stop
RemoveWindowTimer(0, 1)
TBP_SetState(WindowID(0), TBP, #TBPF_NOPROGRESS)
progress = 0
Case 2 ; pause
pause ! 1
If pause
AddWindowTimer(0, 1, 100)
TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
SetGadgetText(2, "pause")
Else
RemoveWindowTimer(0, 1)
TBP_SetState(WindowID(0), TBP, #TBPF_PAUSED)
SetGadgetText(2, "weiter")
EndIf
EndSelect
Case #PB_Event_Timer
progress + 1
If progress > 100 : progress = 0 : EndIf
TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
TBP_SetValue(WindowID(0), TBP, progress)
EndSelect
ForEver