zoukankan      html  css  js  c++  java
  • 隐藏windows任务栏中的窗口显示

    在实际应用中遇到类似下列需要:

    隐藏windows窗口,在windows任务栏中窗口不可见,但应用程序在后台运行。

     windows应用程序的窗口默认会在任务栏中添加一个可见的窗口项,方便用户操作和在不同应用程序中切换。

    考虑到windows操作系统是基于shell的,查找shell的接口资料会发现 ITaskbarList interface 。ITaskbarList提供了AddTabDeleteTab函数,用于向任务栏中添加删除窗口项。

    第一种方法就是使用ITaskbarList接口,在程序启动时将窗口项从任务栏中删除。

    代码如下: 

     1  1 ITaskbarList* pTaskbarList;
     2  2 hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, 
     3  3     IID_ITaskbarList, (void**)&pTaskbarList );
     4  4 
     5  5 if(SUCCEEDED(hr))
     6  6 {
     7  7     pTaskbarList->HrInit();
     8  8     if(bShow)
     9  9         pTaskbarList->AddTab(hWnd);
    10 10     else
    11 11         pTaskbarList->DeleteTab(hWnd);
    12 12 
    13 13     pTaskbarList->Release();
    14 14 }

    从另一个角度考虑,windows窗口是否有类似的属性,用于指定窗口样式,不在任务栏中显示呢?

    下面可以看看Extended Window Styles的资料,其中有这样的扩展属性:WS_EX_TOOLWINDOW。指定该属性表示窗口将会作为浮动工具栏使用,其窗口不会再任务栏中显示,并且有特殊的显示处理逻辑,这也恰好符合需要。

    那么使用这种方式就需要调用CreateWindowEx函数。

     另外,如果你希望窗口完全不可见,可以在创建窗口的时候指定窗口属性为不可见,这样就是直接创建一个后台进程用于处理其他事务。但不推荐这么处理,毕竟窗口完全不可见的话,可以直接CUI编程,没必要使用GUI。

    本文作者:Tocy

    版权所有,请勿用于商业用途,转载请注明原文地址。本人保留所有权利。

  • 相关阅读:
    Java多线程
    JVM的结构
    CURL POST 请求
    网页504超时 apache php
    Web服务器超时处理
    apache自带压力测试工具ab详解
    好用的日期组件My97DatePicker
    CI源码阅读
    apache rewrite规则详解
    安装mysqli 扩展
  • 原文地址:https://www.cnblogs.com/tocy/p/Method-HideWindowInTaskBar.html
Copyright © 2011-2022 走看看