Using
luis' code base:
Code: Select all
;
; based on ITaskbarList3 code by luis:
; http://www.purebasic.fr/english/viewtopic.php?f=13&t=49356&start=5&hilit=ITaskbarList3
;
EnableExplicit
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd391692%28v=vs.85%29.aspx
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$)
SetThumbnailTooltip.i (hWnd.i,pszTip$)
SetThumbnailClip.i (hWnd.i,*prcClip)
EndInterface
Interface ITaskbarList4 Extends ITaskbarList3
SetTabProperties.i (hwndTab.i,stpFlags.l)
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
#TBPF_NOPROGRESS = $0
#TBPF_INDETERMINATE = $1
#TBPF_NORMAL = $2
#TBPF_ERROR = $4
#TBPF_PAUSED = $8
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_INPROC_SERVER16 = $8
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_INPROC_HANDLER16 = $20
#CLSCTX_RESERVED1 = $40
#CLSCTX_RESERVED2 = $80
#CLSCTX_RESERVED3 = $100
#CLSCTX_RESERVED4 = $200
#CLSCTX_NO_CODE_DOWNLOAD = $400
#CLSCTX_RESERVED5 = $800
#CLSCTX_NO_CUSTOM_MARSHAL = $1000
#CLSCTX_ENABLE_CODE_DOWNLOAD = $2000
#CLSCTX_NO_FAILURE_LOG = $4000
#CLSCTX_DISABLE_AAA = $8000
#CLSCTX_ENABLE_AAA = $10000
#CLSCTX_FROM_DEFAULT_CONTEXT = $20000
#CLSCTX_ACTIVATE_32_BIT_SERVER = $40000
#CLSCTX_ACTIVATE_64_BIT_SERVER = $80000
#CLSCTX_ENABLE_CLOAKING = $100000
#CLSCTX_PS_DLL = $80000000
Procedure.i Create_TaskbarList3()
Protected *tl3.ITaskbarList3
CoInitialize_(#Null)
CoCreateInstance_ (?CLSID_TaskBarList,#Null,#CLSCTX_INPROC_SERVER,?IID_ITaskBarList3,@*tl3)
ProcedureReturn *tl3
EndProcedure
Procedure.i Destroy_TaskbarList3 (*tl3.ITaskbarList3)
If *tl3
*tl3\Release()
EndIf
CoUninitialize_()
EndProcedure
Enumeration
#WIN_MAIN
EndEnumeration
Procedure Main()
Protected iEvent, pct, rec.RECT
Protected *tl3.ITaskbarList3
If OpenWindow(#WIN_MAIN, 0, 0, 300, 150, "My Window", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
*tl3 = Create_TaskbarList3()
*tl3\HrInit()
;*tl3\SetProgressValue(WindowID(#WIN_MAIN),0,100)
;*tl3\SetProgressState(WindowID(#WIN_MAIN), #TBPF_INDETERMINATE)
Repeat
Select WaitWindowEvent()
Case #PB_Event_RestoreWindow
*tl3\SetProgressState(WindowID(#WIN_MAIN), #TBPF_NOPROGRESS)
Case #PB_Event_MinimizeWindow
*tl3\SetProgressState(WindowID(#WIN_MAIN), #TBPF_INDETERMINATE)
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Destroy_TaskbarList3 (*tl3)
EndProcedure
Main()
Win7+ only, and proper use would be for showing state (processing something), not notifications.
Highlighting, instead flashing:
Code: Select all
Case #PB_Event_MinimizeWindow
*tl3\SetProgressValue(WindowID(#WIN_MAIN),100,100)
*tl3\SetProgressState(WindowID(#WIN_MAIN), #TBPF_PAUSED)
(Flashing could probably done by using a timer)