[.NET] 打造防“狼”神器 :任务栏篇
@微微一笑:本文标题纯属自娱自乐。
隐藏任务栏效果图:

对比

说起来惭愧,上面这个隐藏任务栏功能,只是完成了我一半的预想。本想是可以选择性的隐藏任务栏上的某个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] 打造防“狼”神器 :任务栏篇的更多相关文章
- webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器
#webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器 -- 工欲善其事 必先利其器 ##各工具介绍 `webstorm`是**JetBrains* ...
- 打造高效的工作环境 – SHELL 篇
注:本文由雷俊(Javaer/Emacser)和我一起编辑,所以文章版权归雷俊与我共同所有,转载者必需注明出处和我们两位作者.原文最早发于酷壳微信公众号,后来我又做了一些修改,再发到博客这边. 程序员 ...
- 邮件江湖群狼环伺 U-Mail邮件系统防狼有术
小时候听过一首儿歌<小兔子乖乖>,里面说到有条恶狼,常常冒充小兔子的“妈妈”,要求小兔 子开门,但小兔子谨守妈妈的训诫,就是不开门,直到辨别出妈妈在窗外的声音,才打开房门.如果我们将一些似 ...
- Cocos2d-x单机游戏防八门神器修改数据
来源:http://cocos2d.9tech.cn/news/2014/0212/39812.html 网上的cocos2d-x教程多为知识点的讲解,但我们学习cocos2d-x的目的是为了什么?为 ...
- Python大法之从火车余票查询到打造抢Supreme神器
本文作者:i春秋作家——阿甫哥哥 系列文章专辑:https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=9 ...
- 自定义View5 -塔防小游戏:第二篇防御塔随意放置
第一篇:一个防御塔+多个野怪(简易版) 第二篇:防御塔随意放置 自定义View,处理事件分发,up,move,down. 第三篇:防御塔随意放置+多组野怪 第四篇:多波野怪 第五篇:杀死野怪获得金币 ...
- 打造android偷懒神器———ListView的万能适配器
如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序
整理一下这几天学习的资料和代码 第一部分.上代码 1.spring各种器的实现,idea搭建spring-boot的教程在这里http://www.jianshu.com/p/9082a533fa3c ...
随机推荐
- fw: firefox plugin
http://blog.csdn.net/fancycow/article/details/7261191 firefox的插件分两种类型,一种extension,叫扩展,一种是plugin,我们叫插 ...
- NOIP总结
拿到题目先写裸的暴力,暴力一定要写对,没想出正解有暴力垫底,想出了正解也可以拿来拍 过了样例之后一定要造数据测,数据越坑越好 一定要造极限数据,哪怕造不知道答案的数据都行,主要是检测RE和TLE,正确 ...
- Oracle数据库(1)
Oracle基本数据类型:Oracle的基本呢数据类型按类型分为:字符串类型,数据类型,日期类型,LOB类型等.1.字符串类型:①char:定长字符串,最多存储2k字节,在不指定char长度的情况下, ...
- nginx 编译模块说明
--prefix= <path> - Nginx安装路径.如果没有指定,默认为 /usr/local/nginx. --sbin-path= <path> - Nginx可执行 ...
- centos7安装tftp服务器
1.安装 su #进入root yum install xinetd yum install tftp yum install tftp-server 2.配置tftp vim /etc/xinetd ...
- zz
婚恋新现象 杭州男为何更愿意娶外地女孩?-浙江新闻-浙江在线 剩男三无
- 通用简单的 分页 SQL
select ID,TITLE,CONTENT,USERNAME,REALNAME,UNIT,UNITID,NOWTIMES,ACCEPTERID,ACCEPTERNAM ...
- unity3d发布Android程序
unity3d是一个跨平台的游戏开发引擎,可以使用c#开发各种平台上的游戏,如windows,Mac,Android,windows phone,IOS,Flash等.下面说下如何将开发好的unity ...
- linux设备分类
网络设备:常见的有以太网卡.CAN总线.WIFI.蓝牙 重要的结构体: net_device:用于描述网络设备的属性,为上层提供一个统一的操作接口.网络设备的驱动实际上就是填充此结构体,实现其中的各种 ...
- windows server 时间同步
域环境,加入域的客户端时间同步服务器时间 问题:服务器存在一种情况,不存在"intelnet时间"选项卡 解决办法:手动修改为正确时间 客户端运行: CMD-->w32tm ...