利用 SHELL 的 ITaskbarList 接口控制 TaskBar 图标

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


#include <objbase.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);

也可以去掉图标。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值