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

简介: Shell 的 ITaskbarList 接口在 VC6.0 中没有定义,下面给出它的定义: #include #include DECLARE_INTERFACE_(ITaskbarList, IUnknown) { STDMETHOD(QueryInter...
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);

也可以去掉图标。
目录
相关文章
|
7月前
|
域名解析 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
【Shell 命令集合 网络通讯 】Linux 设置和管理网络接口配置信息 netconfig命令 使用指南
252 1
|
7月前
|
监控 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示网络 连接、路由表和网络接口信息 netstat命令 使用指南
217 1
|
Java Shell Linux
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
“{}”在linux shell里面表示生成序列、在for循环中$*和$@的区别、注意事项: ①[ 条件判断式 ],中括号和条件判断式之间必须有空格②if 后要有空格、在中括号里面的话就不用&&(||)而是用-a(-and)(和-o(-or))、用逻辑与&&逻辑或||连接(单分支)(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。 (3)最后的“*)”表示默认模式,相当于 java 中的 default。当
242 1
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
|
Web App开发 存储 Unix
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(五)进程与控制终端(shell)去绑定(解耦)的操作
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(五)进程与控制终端(shell)去绑定(解耦)的操作
174 0
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(五)进程与控制终端(shell)去绑定(解耦)的操作
|
Java Shell Linux
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
|
Shell 开发者
Shell脚本条件控制| 学习笔记
快速学习Shell脚本条件控制
130 0
Shell脚本条件控制| 学习笔记
|
Shell C语言 开发者
Shell脚本循环控制| 学习笔记
Shell脚本循环控制| 学习笔记
126 0
Shell脚本循环控制| 学习笔记
|
Java Shell
Java:通过Shell脚本控制SpringBoot项目的重新部署
Java:通过Shell脚本控制SpringBoot项目的重新部署
151 0
|
监控 Shell Linux
shell脚本编程之控制脚本
shell脚本编程之控制脚本
235 0
|
Shell C语言 开发者
Shell脚本循环控制| 学习笔记
快速学习Shell脚本循环控制
Shell脚本循环控制| 学习笔记