Geoff Chappell - Software Analyst
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.