#include <AutoItObject.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Constants.au3>
Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
OnAutoItExitRegister('_Exit')
#region Constants
;THUMBBUTTONMASK
Global Const $THB_BITMAP = 0x00000001
Global Const $THB_ICON = 0x00000002
Global Const $THB_TOOLTIP = 0x00000004
Global Const $THB_FLAGS = 0x00000008
;ThumbEvent
Global Const $THBN_CLICKED = 0x1800
;THUMBBUTTONFLAGS
Global Const $THBF_ENABLED = 0x00000000
Global Const $THBF_DISABLED = 0x00000001
Global Const $THBF_DISMISSONCLICK = 0x00000002
Global Const $THBF_NOBACKGROUND = 0x00000004
Global Const $THBF_HIDDEN = 0x00000008
Global Const $THBF_NONINTERACTIVE = 0x00000010
#endregion
Global $hGui = GUICreate("Thumbnail Buttons", 250, 10)
Global $o_hGui = Number($hGui)
GUIRegisterMsg($WM_COMMAND, 'WM_Command')
GUISetState()
_AutoItObject_StartUp()
Global $pTask
Global $oTaskBar = _GetTaskBarObj($pTask)
$oTaskBar.HrInit()
Global $aButtons
_Create_THUMBBUTTON_Structures($aButtons)
$oTaskBar.ThumbBarAddButtons($o_hGui, 3, Number(DllStructGetPtr($aButtons)))
Do
Until GUIGetMsg() = -3
Func _Create_THUMBBUTTON_Structures(ByRef $Struct)
$sIcondown = _WinAPI_LoadImage(0, @ScriptDir & '\Icons\Down.ico', $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE)
$sIconleft = _WinAPI_LoadImage(0, @ScriptDir & '\Icons\Left.ico', $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE)
$sIconright = _WinAPI_LoadImage(0, @ScriptDir & '\Icons\Right.ico', $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE)
Local $tagTHUMBBUTTON = "dword;UINT;UINT;handle;WCHAR[260];dword"
$Struct = DllStructCreate($tagTHUMBBUTTON & ';' & $tagTHUMBBUTTON & ';' & $tagTHUMBBUTTON)
;Down Button
DllStructSetData($Struct, 1, BitOR($THB_ICON, $THB_TOOLTIP, $THB_FLAGS));'dwMask'
DllStructSetData($Struct, 2, 10);'iId'
DllStructSetData($Struct, 3, 0);'iBitmap'
DllStructSetData($Struct, 4, $sIcondown);'hIcon'
DllStructSetData($Struct, 5, 'Down Button');'szTip'
DllStructSetData($Struct, 6, $THBF_ENABLED);'dwFlags'
;Left Button
DllStructSetData($Struct, 7, BitOR($THB_ICON, $THB_TOOLTIP, $THB_FLAGS));'dwMask'
DllStructSetData($Struct, 8, 11);'iId'
DllStructSetData($Struct, 9, 0);'iBitmap'
DllStructSetData($Struct, 10, $sIconleft);'hIcon'
DllStructSetData($Struct, 11, 'Left Button');'szTip'
DllStructSetData($Struct, 12, $THBF_ENABLED);'dwFlags'
;Right Button
DllStructSetData($Struct, 13, BitOR($THB_ICON, $THB_TOOLTIP, $THB_FLAGS));'dwMask'
DllStructSetData($Struct, 14, 12);'iId'
DllStructSetData($Struct, 15, 0);'iBitmap'
DllStructSetData($Struct, 16, $sIconright);'hIcon'
DllStructSetData($Struct, 17, 'Right Button');'szTip'
DllStructSetData($Struct, 18, $THBF_ENABLED);'dwFlags'
EndFunc
; ===================================================================
; _GetTaskBarObj(ByRef $pInstance)
;
; Description. Creates and Returns ITaskbar Interface Object. (Or is this a Dispatch Object?)
; Parameters:
; $pInstance - IN/OUT - Pointer to var to put CoCreateInstance.
; Returns: ITaskbar Object
; None.
; ===================================================================
Func _GetTaskBarObj(ByRef $pInstance)
Local $CLSID_TaskBarlist = _AutoItObject_CLSIDFromString("{56FDF344-FD6D-11D0-958A-006097C9A090}")
Local $IID_ITaskbarList3 = _AutoItObject_CLSIDFromString("{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}")
Local $tagInterface = "QueryInterface long(ptr;ptr;ptr);" & _
"AddRef ulong();" & _
"Release ulong();" & _
"HrInit long();" & _
"AddTab long(hwnd);" & _
"DeleteTab long(hwnd);" & _
"ActivateTab long(hwnd);" & _
"SetActiveAlt long(hwnd);" & _
"MarkFullscreenWindow long(hwnd;int);" & _
"SetProgressValue long(hwnd;uint64;uint64);" & _
"SetProgressState long(hwnd;int);" & _
"RegisterTab long(hwnd;hwnd);" & _
"UnregisterTab long(hwnd);" & _
"SetTabOrder long(hwnd;hwnd);" & _
"SetTabActive long(hwnd;hwnd;dword);" & _
"ThumbBarAddButtons long(hwnd;uint;ptr);" & _
"ThumbBarUpdateButtons long(hwnd;uint;ptr);" & _
"ThumbBarSetImageList long(hwnd;ptr);" & _
"SetOverlayIcon long(hwnd;ptr;wstr);" & _
"SetThumbnailTooltip long(hwnd;wstr);" & _
"SetThumbnailClip long(hwnd;ptr);"
;~ Local $pInstance
_AutoItObject_CoCreateInstance(DllStructGetPtr($CLSID_TaskBarlist), 0, 1, DllStructGetPtr($IID_ITaskbarList3), $pInstance)
Return _AutoItObject_WrapperCreate($pInstance, $tagInterface)
EndFunc ;==>_GetTaskBarObj
Func WM_Command($hWnd, $msg, $wParam, $lParam)
Local $iMsg = _WinAPI_HiWord($wParam)
If $iMsg = $THBN_CLICKED Then
Local $iID = _WinAPI_LoWord($wParam)
Switch $iID
Case 11
MsgBox(0, 'Button Pressed', 'Left Button ID = ' & $iID)
Case 12
MsgBox(0, 'Button Pressed', 'Right Button ID = ' & $iID)
Case 10
MsgBox(0, 'Button Pressed', 'Down Button ID = ' & $iID)
EndSwitch
EndIf
EndFunc ;==>WM_Command
Func _Exit()
$oTaskBar = 0
_AutoItObject_Shutdown()
EndFunc ;==>_Exit
Func _ErrFunc()
ConsoleWrite("! COM Error ! Number: 0x" & Hex($oError.number, 8) & " ScriptLine: " & $oError.scriptline & " - " & $oError.windescription & @CRLF)
Return
EndFunc ;==>_ErrFunc