ITaskGroup

The ITaskGroup interface is implemented in EXPLORER.EXE by a class that is named internally as CTaskGroup. The interface is thought to be used only within EXPLORER. Yet it is certainly no mere implementation detail with no effects outside EXPLORER. The class models a group of taskbar buttons whose corresponding windows are judged by Microsoft to be so similar that they must be grouped together on the taskbar and thereafter kept together as a unit whether as separate buttons or combined into one. Any attempt at putting users in control of this grouping, whether to disable it altogether or to undo a particular group or even just to reorder the buttons within a group, will require a good understanding of this class and its interface.

Please note that the interface is not only internal to EXPLORER.EXE but is highly variable from one Windows version to another. At least Microsoft has changed the IID each time the interface has changed substantively, which has not always been its practice with COM interfaces in the shell. Beware, however, that these notes have been prepared only from inspection of the original release of each version.

Interface IID Versions
ITaskGroup {D2C5AD6A-C4C5-4DE1-AE35-59A809405534} 6.1 only
{C499358F-5DF6-4E9A-826C-05B6CAD5BEFD} 6.2 to 6.3
{3AF85589-678F-4FB5-8925-5A134EBF572C} 10.0 only

No evidence is known that Microsoft defines the conventional symbol IID_ITaskGroup for this interface’s IID. Microsoft’s names and types for the ITaskGroup methods are known from the public symbol files for EXPLORER.EXE. The presentation here follows the ordering of the virtual function table after the IUnknown methods.

Offset (x86) Offset (x64) Prototype Versions
0x0C 0x18
HRESULT 
STDMETHODCALLTYPE 
Initialize (
    PCIDLIST_ABSOLUTE, 
    PCWSTR, 
    PCWSTR);
6.1 and higher
0x10 0x20
HRESULT 
STDMETHODCALLTYPE 
AddTaskItem (
    ITaskItem *, 
    ITaskItem *);
6.1 and higher
0x14 0x28
HRESULT STDMETHODCALLTYPE RemoveTaskItem (ITaskItem *);
6.1 and higher
0x18 0x30
HRESULT STDMETHODCALLTYPE EnumTaskItems (IEnumTaskItems **);
6.1 and higher
0x1C 0x38
HRESULT 
STDMETHODCALLTYPE 
DoesWindowMatch (
    HWND, 
    PCIDLIST_ABSOLUTE, 
    PCWSTR, 
    WINDOWMATCHCONFIDENCE, 
    ITaskItem **);
6.1 and higher
0x20 0x40
HRESULT 
STDMETHODCALLTYPE 
GetItemFromWindow (
    HWND, 
    ITaskItem **);
6.1 and higher
0x24 0x48
HRESULT STDMETHODCALLTYPE GetNumItems (INT *);
6.1 only
INT STDMETHODCALLTYPE GetNumItems (VOID);
6.2 and higher
0x28 0x50
HRESULT 
STDMETHODCALLTYPE 
GetNumTabs (
    INT *, 
    INT *);
6.1 and higher
0x2C 0x58
HRESULT 
STDMETHODCALLTYPE 
GetTitleText (
    ITaskItem *, 
    PWSTR, 
    INT);
6.1 and higher
0x30 0x60
HRESULT 
STDMETHODCALLTYPE 
GetTooltipText (
    ITaskItem *, 
    PWSTR, 
    INT);
6.1 and higher
0x34 0x68
HRESULT STDMETHODCALLTYPE GetLauncherName (PWSTR *);
6.1 and higher
0x38 (6.1 to 6.3) 0x70 (6.1 to 6.3)
HRESULT 
STDMETHODCALLTYPE 
GetIconPref (
    ITaskItem *, 
    INT *);
6.1 to 6.3
0x3C (6.1 to 6.3) 0x78 (6.1 to 6.3)
HRESULT 
STDMETHODCALLTYPE 
SetIconPref (
    ITaskItem *, 
    INT);
6.1 to 6.3
0x40 (6.1 to 6.3);
0x38
0x80 (6.1 to 6.3);
0x70
HRESULT 
STDMETHODCALLTYPE 
GetIconId (
    ITaskItem *, 
    INT *);
6.1 and higher
0x44 (6.1 to 6.3);
0x3C
0x88 (6.1 to 6.3);
0x78
HRESULT 
STDMETHODCALLTYPE 
SetIconId (
    ITaskItem *, 
    INT);
6.1 and higher
0x48 (6.1 to 6.3) 0x90 (6.1 to 6.3)
HRESULT 
STDMETHODCALLTYPE 
GetHotTrackColor (
    ITaskItem *, 
    DWORD *);
6.1 to 6.3
0x4C (6.1 to 6.3) 0x98 (6.1 to 6.3)
HRESULT 
STDMETHODCALLTYPE 
SetHotTrackColor (
    ITaskItem *, 
    DWORD);
6.1 to 6.3
0x50 (6.1 to 6.2);
0x40
0xA0 (6.1 to 6.2);
0x80
PCWSTR STDMETHODCALLTYPE GetExeName (VOID);
6.1 and higher
0x54 (6.1 to 6.2);
0x44
0xA8 (6.1 to 6.2);
0x88
HRESULT STDMETHODCALLTYPE SetExeName (PCWSTR);
6.1 and higher
0x58 (6.1 to 6.2);
0x48
0xB0 (6.1 to 6.2);
0x90
PCWSTR STDMETHODCALLTYPE GetIconResource (VOID);
6.1 and higher
0x5C (6.1 to 6.2);
0x4C
0xB8 (6.1 to 6.2);
0x98
PCWSTR STDMETHODCALLTYPE GetAppID (VOID);
6.1 and higher
0x60 (6.1 to 6.2);
0x50
0xC0 (6.1 to 6.2);
0xA0
PCWSTR STDMETHODCALLTYPE GetAppIDForSQM (VOID);
6.1 and higher
0x64 (6.1 to 6.2);
0x54
0xC8 (6.1 to 6.2);
0xA8
HRESULT STDMETHODCALLTYPE SetAppID (PCWSTR);
6.1 and higher
0x68 (6.1 to 6.2);
0x58
0xD0 (6.1 to 6.2);
0xB0
BOOL STDMETHODCALLTYPE ShouldLog (VOID);
6.1 and higher
0x6C (6.1 to 6.3);
0x5C
0xD8 (6.1 to 6.3);
0xB8
DWORD STDMETHODCALLTYPE GetFlags (VOID);
6.1 to 6.2
DWORD STDMETHODCALLTYPE GetFlags (VOID) const;
6.3 and higher
0x70 (6.1 to 6.3);
0x60
0xE0 (6.1 to 6.3);
0xC0
HRESULT 
STDMETHODCALLTYPE 
UpdateFlags (
    DWORD, 
    DWORD);
6.1 and higher
0x74 (6.1 to 6.3);
0x64
0xE8 (6.1 to 6.3);
0xC8
HRESULT STDMETHODCALLTYPE GetLastActiveItem (ITaskItem **);
6.1 and higher
0x78 (6.1 to 6.3);
0x68
0xF0 (6.1 to 6.3);
0xD0
HRESULT STDMETHODCALLTYPE GroupMenuCommand (INT);
6.1 only
HRESULT 
STDMETHODCALLTYPE 
GroupMenuCommand (
    HMONITOR, 
    INT);
6.2 to 6.3
HRESULT 
STDMETHODCALLTYPE 
GroupMenuCommand (
    ITaskItemFilter *, 
    INT);
10.0 and higher
0x7C (6.1 to 6.3);
0x6C
0xF8 (6.1 to 6.3);
0xD8
HRESULT STDMETHODCALLTYPE SetTip (PCWSTR);
6.1 and higher
0x70 0xE0
DWORD STDMETHODCALLTYPE GetFirstOpenedItem (VOID);
10.0 and higher
0x80 (6.1 to 6.3) 0x0100 (6.1 to 6.3)
PCIDLIST_ABSOLUTE STDMETHODCALLTYPE GetShortcutIDList (VOID);
6.1 to 6.3
0x84 (6.1 to 6.3);
0x74
0x0108 (6.1 to 6.3);
0xE8
HRESULT STDMETHODCALLTYPE SetShortcutIDList (PCIDLIST_ABSOLUTE);
6.1 and higher
0x88 (6.1 to 6.3);
0x78
0x0110 (6.1 to 6.3);
0xF0
PIDLIST_ABSOLUTE STDMETHODCALLTYPE GetApplicationIDList (VOID);
6.1 and higher
0x8C (6.1 to 6.3);
0x7C
0x0118 (6.1 to 6.3);
0xF8
HRESULT 
STDMETHODCALLTYPE 
RemoveTabs (
    ITaskItem *, 
    INT, 
    VOID (STDAPICALLTYPE *) (ULONG_PTR, HWND), 
    ULONG_PTR);
6.1 and higher
0x90 (6.1 to 6.3);
0x80
0x0120 (6.1 to 6.3);
0x0100
HICON STDMETHODCALLTYPE GetOverlayIcon (VOID);
6.1 and higher
0x94 (6.1 to 6.3);
0x84
0x0128 (6.1 to 6.3);
0x0108
PCWSTR STDMETHODCALLTYPE GetOverlayIconDescription (VOID);
6.1 and higher
0x98 (6.1 to 6.3);
0x88
0x0130 (6.1 to 6.3);
0x0110
BOOL STDMETHODCALLTYPE IsAppPinnable (VOID);
6.1 and higher
0x9C (6.1 to 6.3);
0x8C
0x0138 (6.1 to 6.3);
0x0118
BOOL STDMETHODCALLTYPE IsAppLaunchable (VOID);
6.1 and higher
0xA0 (6.1 to 6.3);
0x90
0x0140 (6.1 to 6.3);
0x0120
BOOL STDMETHODCALLTYPE HasDestinations (VOID);
6.1 and higher
0xA4 (6.1 to 6.3);
0x94
0x0148 (6.1 to 6.3);
0x0128
BOOL STDMETHODCALLTYPE HasDestinationsMenu (VOID);
6.1 and higher
0xA8 (6.1 to 6.3);
0x98
0x0150 (6.1 to 6.3);
0x0130
HRESULT STDMETHODCALLTYPE SetPinnableAndLaunchable (BOOL);
6.1 and higher
0xAC (6.2 to 6.3);
0x9C
0x0158 (6.2 to 6.3);
0x0138
VOID STDMETHODCALLTYPE SetVisualOrder (INT);
6.2 and higher
0xB0 (6.2 to 6.3);
0xA0
0x0160 (6.2 to 6.3);
0x0140
INT STDMETHODCALLTYPE GetVisualOrder (VOID);
6.2 and higher
0xA4 0x0148
bool STDMETHODCALLTYPE IsImmersiveGroup (VOID);
10.0 and higher
0xA8 0x0150
bool STDMETHODCALLTYPE HasItemsOnCurrentDesktop (VOID);
10.0 and higher

Among the types that can be passed as arguments or be produced at addresses that are passed as arguments, IEnumTaskItems, ITaskItem and ITaskItemFilter are undocumented COM interfaces and WINDOWMATCHCONFIDENCE is an undocumented enumeration.