@微微一笑:本文标题纯属自娱自乐。

隐藏任务栏效果图:

对比

说起来惭愧,上面这个隐藏任务栏功能,只是完成了我一半的预想。本想是可以选择性的隐藏任务栏上的某个TaskBarButton,但是Win7+后的任务栏变化之大,令我到现在还没有完全搞清楚选择性隐藏功能的实现思路。也希望博友们给我点思路,为人类做一点贡献,又说远了。

先说一说Win7+ 与 XP- 任务栏的不同 (通过Spy++查看):

Win7:

XP:

从上面两图可以看出,Win7+ 所有的TaskBarButton 是在MSTaskListWClass的窗口上,而 XP 是在ToolbarWindow32 的窗口上。并且以前在XP上能使用的Windows自定义消息(比如:TB_BUTTONCOUNT),在Win7上完全没有用。所以为了实现本文的隐藏任务栏的效果,就要判断下操作系统的版本了。下面以Win8为例子,说一下用到了哪些WinAPI函数。

         [DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClass, string lpWindowName); [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClass, string lpWindowName); [DllImport("User32.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

这些API函数大家也都很熟悉了,不懂的童靴也可以GG或者来问问我。

主要的实现思路:

按照Spy++所显示的层次结构,一步一步的往下获得MSTaskListWClass窗口的句柄(利用FindWindow 与 FindWindowEx),再利用ShowWindow控制MSTaskListWClass窗口的显示与隐藏。代码如下:

        IntPtr _Ptr = FindWindow("Shell_TrayWnd",null);
if (_Ptr == IntPtr.Zero)
return;
IntPtr _ChildHWnd = FindWindowEx(_Ptr, IntPtr.Zero, "ReBarWindow32", null);
if (_ChildHWnd == IntPtr.Zero)
return;
IntPtr _MSTaskHwnd = FindWindowEx(_ChildHWnd, IntPtr.Zero, "MSTaskSwWClass", null);
if (_MSTaskHwnd == IntPtr.Zero)
return;
IntPtr _MSTaskListHwnd = FindWindowEx(_MSTaskHwnd, IntPtr.Zero, "MSTaskListWClass", null);
if (_MSTaskListHwnd == IntPtr.Zero)
return;
//Show
ShowWindow(_MSTaskListHwnd, );
//Hide
ShowWindow(_MSTaskListHwnd, );

代码是比较简单,本文所有的隐藏效果是达到了,但是我的想法还没有实现,我会继续探索下去 --- TaskBarButton的选择性隐藏。

关于任务栏操作的一些讨论:

http://social.msdn.microsoft.com/Forums/en-US/8e1e504e-fa91-426a-97b8-f5640f64ad93/windows-7-taskbar-the-undocumented-mstasklistwclass-

http://blog.strixcode.com/2011/01/how-to-find-taskbar-button-position-on.html

[.NET] 打造防“狼”神器 :任务栏篇的更多相关文章

  1. webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器

    #webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器 -- 工欲善其事 必先利其器 ##各工具介绍 `webstorm`是**JetBrains* ...

  2. 打造高效的工作环境 – SHELL 篇

    注:本文由雷俊(Javaer/Emacser)和我一起编辑,所以文章版权归雷俊与我共同所有,转载者必需注明出处和我们两位作者.原文最早发于酷壳微信公众号,后来我又做了一些修改,再发到博客这边. 程序员 ...

  3. 邮件江湖群狼环伺 U-Mail邮件系统防狼有术

    小时候听过一首儿歌<小兔子乖乖>,里面说到有条恶狼,常常冒充小兔子的“妈妈”,要求小兔 子开门,但小兔子谨守妈妈的训诫,就是不开门,直到辨别出妈妈在窗外的声音,才打开房门.如果我们将一些似 ...

  4. Cocos2d-x单机游戏防八门神器修改数据

    来源:http://cocos2d.9tech.cn/news/2014/0212/39812.html 网上的cocos2d-x教程多为知识点的讲解,但我们学习cocos2d-x的目的是为了什么?为 ...

  5. Python大法之从火车余票查询到打造抢Supreme神器

    本文作者:i春秋作家——阿甫哥哥 系列文章专辑:https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=9 ...

  6. 自定义View5 -塔防小游戏:第二篇防御塔随意放置

    第一篇:一个防御塔+多个野怪(简易版) 第二篇:防御塔随意放置 自定义View,处理事件分发,up,move,down. 第三篇:防御塔随意放置+多组野怪 第四篇:多波野怪 第五篇:杀死野怪获得金币 ...

  7. 打造android偷懒神器———ListView的万能适配器

    如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...

  8. 打造android偷懒神器———RecyclerView的万能适配器

    转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...

  9. 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序

    整理一下这几天学习的资料和代码 第一部分.上代码 1.spring各种器的实现,idea搭建spring-boot的教程在这里http://www.jianshu.com/p/9082a533fa3c ...

随机推荐

  1. Windows操作 - Photoshop为图片添加透明立体水印

    原文地址:http://design.yesky.com/photoshop/252/2427752.shtml 本文我们介绍用Photoshop为图片添加透明立体水印的方法和技巧. 原图: 打开原图 ...

  2. [转]整理索引碎片,提升SQL Server速度

    数据库表A有十万条记录,查询速度本来还可以,但导入一千条数据后,问题出现了.当选择的数据在原十万条记录之间时,速度还是挺快的:但当选择的数据在这一千条数据之间时,速度变得奇慢. 凭经验,这是索引碎片问 ...

  3. MFC学习 修改窗口样式

    1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...

  4. sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度

    smallint  是一种精确的数值数据类型,其精度在算术运算后不变,采用2个字节编码 有符号的 smallint 值的范围是 -2^15-------2^15 -1,即 -32768 ----327 ...

  5. .net Url重写

    详细说明及下载dll源码路径: http://msdn.microsoft.com/zh-cn/library/ms972974.aspx 顺带上本人写的一个小例子:http://files.cnbl ...

  6. Windbg 线程状态笔记

    1.ntdll!ZwWaitForSingleObject 线程被挂起,如果下面跟着是这样子: RetAddr : Args to Child : Call Site `7766e518 : `fff ...

  7. EFDC_EE如何设置自适应时间步长

    下图是EFDC_EE的运行时间参数的设置界面,在时间步长的设置中,如果“Safety Factor”参数,设置为非0,即可实现自适应时间步长的设置,但要注意如下几点: 1.“Safety Factor ...

  8. 【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写

    很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看到的当前作者的博客园的域名: http://jx270.cnblogs. ...

  9. 【MVC】 文件及URL 的整理

    我们平时在做Asp.Net MVC(以下就简称mvc)项目的时候,页面文件结构都用了"/Views/Controllers/page.aspx",而把一些PartialView呢放 ...

  10. LiveView 0.8 RC1 could boot evidence files acquired from Win10 64bit

    The latest Windows 10 will be more and more popular in the very near future. Now let's take a look i ...