Shell 的 ITaskbarList 接口在 VC6.0 中没有定义,下面给出它的定义:

#include <obj .h>#include <shlobj.h>DECLARE_INTERFACE_(ITaskbarList, IUnknown) {    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;    STDMETHOD_(ULONG,AddRef)(THIS)  PURE;    STDMETHOD_(ULONG,Release)(THIS) PURE;    STDMETHOD(HrInit)(void) PURE;    STDMETHOD(AddTab)(HWND) PURE;    STDMETHOD(DeleteTab)(HWND) PURE;    STDMETHOD(ActivateTab)(HWND) PURE;    STDMETHOD(SetActiveAlt)(HWND) PURE;};typedef ITaskbarList *LPTASKBARLIST;


注意和 Lv0 兄的定义有点不同,得到了定义,就可以用它控制 Taskbar 了,下面是去掉窗口的 Taskbar 图标的方法,其他以此类推:

LPTASKBARLIST pTaskbarList = NULL;if(SUCCEEDED( ::CoInitialize(NULL) )){    if(SUCCEEDED( ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,         IID_ITaskbarList, (void **)&pTaskbarList) ))    {        if(SUCCEEDED(pTaskbarList->HrInit()))        {            CWnd* pMainWnd = AfxGetMainWnd();            VERIFY( SUCCEEDED( pTaskbarList->DeleteTab( pMainWnd->GetSafeHwnd() ) ) );        }        pTaskbarList->Release();    }    ::CoUninitialize();}


注意,这段代码必须在窗口已经建立好,TaskBar 上已出现图标后调用,不然 hWnd 在 TaskBar 上还不拥有图标,DeleteTab 不起作用。

另外的去掉图标的方法还有:

使用 WS_EX_TOOLWINDOW 标志创建窗口,或者在 OnCreate 中调用 ModifyStyleEx(0, WS_EX_TOOLWINDOW);

也可以去掉图标。
收藏 打印