VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 488|回复: 0

[交流] 真正可用隐藏任务栏图标代码

[复制链接]
51_avatar_middle
online_admins 发表于 2018-3-24 00:04:44 | 显示全部楼层 |阅读模式
前些年写的一些软件,个别一些有隐藏任务栏图标的需求,也从网上翻了不少例子代码,有很多都说给你要设置的窗口加上 WS_EX_TOOLWINDOW 属性,去掉 WS_EX_APPWINDOW 属性。自己也试过,实际上这个窗口变成了一个类似小工具的窗口,标题栏变的很小,感觉很别扭,效果不完美。后来又发现了一种办法还不错,这里面把文章转载过来,希望对大家有帮助!

隐藏窗口任务栏图标的三种方法:

方法1:
  1. ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
复制代码

为窗口设置 WS_EX_TOOLWINDOW 属性,会有以下效果:
1. 窗口图标不在任务栏显示;
2. 窗口不显示在Alt+Tab的切换列表中;
3. 在任务管理器的应用程序Tab中不显示。

但这个属性有一个坑爹的副作用一定要小心,详细请参考:WS_EX_TOOLWINDOW 属性的陷阱:https://www.cctry.com/thread-289458-1-1.html

方法2:
使用 ITaskbarList 接口的 DeleteTab 方法。这个方法在 XP 下是有问题的,被删除的任务栏图标,在窗口被激活时,会再次出现!!再次坑爹!!
  1. BOOL ShowInTaskbar(HWND hWnd, BOOL bShow)
  2. {
  3.     HRESULT hr;
  4.     ITaskbarList* pTaskbarList;
  5.     hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,  
  6.               IID_ITaskbarList, (void**)&pTaskbarList );

  7.     if(SUCCEEDED(hr))
  8.     {
  9.          pTaskbarList->HrInit();
  10.          if(bShow)
  11.                pTaskbarList->AddTab(hWnd);
  12.           else
  13.                pTaskbarList->DeleteTab(hWnd);

  14.          pTaskbarList->Release();
  15.          return TRUE;
  16.     }

  17. return FALSE;
  18. }
复制代码


方法3:
目前我认为比较妥善的一个办法。首先创建一个窗口,并将此窗口隐藏。再以此窗口为父窗口创建你的程序窗口,再利用方法2删除掉任务栏中的图标。
这样处理之后,任务栏中的图标就不会再死而复生了。
通过Spy++去看QQ的主窗口,它也有一个Caption为空的父窗口,想必也是利用的这个方案吧。




上一篇:请问MFC的属性页界面可以和CFormView类一样,显示在主框架的文档区吗?
下一篇:WS_EX_TOOLWINDOW 属性的陷阱
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-22 13:35

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表