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

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

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

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

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

代码如下:

   ITaskbarList* pTaskbarList;
hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,
IID_ITaskbarList, (void**)&pTaskbarList ); if(SUCCEEDED(hr))
{
pTaskbarList->HrInit();
if(bShow)
pTaskbarList->AddTab(hWnd);
else
pTaskbarList->DeleteTab(hWnd); pTaskbarList->Release();
}

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

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

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

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

本文作者:Tocy

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

隐藏windows任务栏中的窗口显示的更多相关文章

  1. Android: Service中创建窗口显示

    WindowManager.LayoutParams: int TYPE_SYSTEM_ALERT  Window type: system window, such as low power ale ...

  2. windows下控制台程序实现窗口显示

    windows下实现窗口显示,如果限定是C/C++语言,并且是原生Windows支持,需要使用GDI或GDI+.一般是在Visual Studio里新建Win32应用程序,而不是Win32 conso ...

  3. Windows MFC 两个OpenGL窗口显示与线程RC问题

    问题为:背景界面是一个OpenGL窗口(对话框),在其上弹出一个OpenGL窗口(模态对话框)时, 1.上方的OpenGL窗口能响应鼠标操作等并刷新: 2.当移动或放大缩小上方的OpenGL窗口时,其 ...

  4. winform中让显示的图片覆盖到父窗体保持父窗体的不可选中的状态,且任务栏中不会显示子窗体的任务选项

    要求:为父窗体添加一个类似于加载等待的功能,当窗体点击备份时弹出且覆盖掉窗体 问题一产生:当为弹窗添加控件时,form.show();导致窗体卡死,控件变得透明化; 问题一分析:当窗体show();之 ...

  5. Windows应用开发中程序窗口中的各种图标尺寸规划

    为了让你的图标在各个视图模式下都能有合适的尺寸,需要制作4种尺寸16x16.32x32.48x48.256x256 在Windows系统中,几乎所有窗口都是ListView,其中的图标都按照指定的尺寸 ...

  6. 【转载】Sqlserver中查询窗口显示行号

    在Sqlserver中编写语句的时候,有时候因为业务逻辑比较复杂,编写的语句会比较多,此时如果编辑器中显示代码的行号,则对于我们的语句编写有很好的辅助作用.sqlserver默认未开启行号显示功能,可 ...

  7. WPF中控制窗口显示位置的三种方式

    首先新建一个WPF工程,在主界面添加一个按钮,并给按钮添加点击事件button1_Click,然后新建一个用于测试弹出位置的窗口TestWindow.1.在屏幕中间显示,设置window.Window ...

  8. Windows:子线程中创建窗口

    一般来讲,UI的所有操作都必须在主线程,否则会出现未知错误.但有时候我们会需要一个功能比较单一的窗口,同时希望他在一个单独的线程运行.并不影响主线程的效率. 下面说明一下新建子线程创建的新窗口的方法, ...

  9. PyQt5中的窗口显示控制

    setWindowState(state) #设置窗口状态 Qt.WindowNoState 无状态-正常状态 Qt.WindowMinimized 最小化 Qt.WindowMaximized 最大 ...

随机推荐

  1. Delphi消息推送

    移动端的消息推送大家都体验过,智能手机上一大堆广告等各种消息会不时从消息栏中弹出来骚扰你. PC程序中我们有时也会用到消息推送,比如通知之类.通常我们使用的方法可能更多地使用Socket之类来处理,有 ...

  2. 73条日常shell命令汇总,总有一条你需要!

    1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo "open" 2.让进程转入后台: Ctrl + z ...

  3. RFID-RC522 与Arduino的连接

    一.前几天在某宝上刚买了个RFID-RC522  ,目标是复制我的门禁卡(看样子没多大希望了).二.各种百度各种谷歌都没找到与Arduino的连接方式. so,分享下我的连接方式,与大家共同进步... ...

  4. 一个MVC4 下的验证码用法

    先看一个核心验证码类(不用在意实现过程,直接copy就行),下面包含了两种验证码图片(原理一样),代码如下: using System; using System.Collections.Generi ...

  5. golang学习笔记 ---数组与切片

    数组: golang数组包含的每个数据称为数组元素(element),数组包含的元素个数被称为数组长度(length). golang数组的长度在定义后不可更改,并且在声明时可以是一个常量或常量表达式 ...

  6. selenium webdriver如何拿到页面的加载时间

    这个问题与语言无关,对于现代浏览器来说,使用 window.performance.timing这个对象就好了. 用execute_script方法(java用executeScript)方法执行 w ...

  7. linux 调用shell脚本传参

    例子: boolean execResult = true;        BufferedReader br = null;        try        {            //lin ...

  8. Android Logcat信息级别解读

    Android Logcat信息级别解读 Logcat信息分为好几个级别,分别是:Assert(断言).Debug(调试).Error(错误).Info(信息).Verbose(详细).Warning ...

  9. unity, 模拟退后台

    //simulateSwitchToBackground.cs using UnityEngine;using System.Collections;using System.Collections. ...

  10. talend 连接mysql数据库没有权限

    使用talend连接一个mysql数据库,提示没有权限,最后发现mysql服务器的配置中只监听了127.0.0.1的端口,拒绝非本地的请求.通过将/etc/mysql/my.cnf中的bind_add ...