; Component Object Model usage demonstration format PE64 GUI 5.0 entry start include 'win64a.inc' struc GUID def { match d1-d2-d3-d4-d5, def \{ .Data1 dd 0x\#d1 .Data2 dw 0x\#d2 .Data3 dw 0x\#d3 .Data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh .Data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,0x\#d5 shr 24 and 0FFh,0x\#d5 shr 16 and 0FFh,0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh \} } interface ITaskBarList,\ QueryInterface,\ AddRef,\ Release,\ HrInit,\ AddTab,\ DeleteTab,\ ActivateTab,\ SetActiveAlt CLSCTX_INPROC_SERVER = 0x1 CLSCTX_INPROC_HANDLER = 0x2 CLSCTX_LOCAL_SERVER = 0x4 CLSCTX_INPROC_SERVER16 = 0x8 CLSCTX_REMOTE_SERVER = 0x10 CLSCTX_INPROC_HANDLER16 = 0x20 CLSCTX_INPROC_SERVERX86 = 0x40 CLSCTX_INPROC_HANDLERX86 = 0x80 CLSCTX_ESERVER_HANDLER = 0x100 CLSCTX_NO_CODE_DOWNLOAD = 0x400 CLSCTX_NO_CUSTOM_MARSHAL = 0x1000 CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000 CLSCTX_NO_FAILURE_LOG = 0x4000 CLSCTX_DISABLE_AAA = 0x8000 CLSCTX_ENABLE_AAA = 0x10000 CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 ID_EXIT = IDCANCEL ID_SHOW = 100 ID_HIDE = 101 IDD_COMDEMO = 1 section '.text' code readable executable start: sub rsp,8 ; Make stack dqword aligned invoke CoInitialize,NULL invoke CoCreateInstance,CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,ShellTaskBar invoke GetModuleHandle,0 invoke DialogBoxParam,rax,IDD_COMDEMO,HWND_DESKTOP,COMDemo,0 cominvk ShellTaskBar,Release invoke ExitProcess,0 proc COMDemo uses rbx, hwnd,msg,wparam,lparam mov [hwnd],rcx cmp edx,WM_INITDIALOG je .wminitdialog cmp edx,WM_COMMAND je .wmcommand cmp edx,WM_CLOSE je .wmclose xor eax,eax jmp .finish .wminitdialog: jmp .processed .wmcommand: cmp r8,BN_CLICKED shl 16 + ID_EXIT je .wmclose cmp r8,BN_CLICKED shl 16 + ID_SHOW je .show cmp r8,BN_CLICKED shl 16 + ID_HIDE jne .processed .hide: cominvk ShellTaskBar,HrInit cominvk ShellTaskBar,DeleteTab,[hwnd] jmp .processed .show: mov rbx,[ShellTaskBar] comcall rbx,ITaskBarList,HrInit comcall rbx,ITaskBarList,AddTab,[hwnd] comcall rbx,ITaskBarList,ActivateTab,[hwnd] jmp .processed .wmclose: invoke EndDialog,[hwnd],0 .processed: mov eax,1 .finish: ret endp section '.data' data readable writeable CLSID_TaskbarList GUID 56FDF344-FD6D-11D0-958A-006097C9A090 IID_ITaskbarList GUID 56FDF342-FD6D-11D0-958A-006097C9A090 ShellTaskBar ITaskBarList section '.idata' import data readable library kernel,'KERNEL32.DLL',\ user,'USER32.DLL',\ ole,'OLE32.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess,'ExitProcess' import user,\ DialogBoxParam,'DialogBoxParamA',\ EndDialog,'EndDialog' import ole,\ CoInitialize,'CoInitialize',\ CoCreateInstance,'CoCreateInstance' section '.rsrc' resource data readable directory RT_DIALOG,dialogs resource dialogs,\ IDD_COMDEMO,LANG_ENGLISH+SUBLANG_DEFAULT,comdemo dialog comdemo,'Taskbar item control',70,70,170,24,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'BUTTON','Show',ID_SHOW,4,4,45,15,WS_VISIBLE+WS_TABSTOP dialogitem 'BUTTON','Hide',ID_HIDE,54,4,45,15,WS_VISIBLE+WS_TABSTOP dialogitem 'BUTTON','Exit',ID_EXIT,120,4,45,15,WS_VISIBLE+WS_TABSTOP enddialog