[.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 ...
随机推荐
- eclipse 调试时出现 Error: [Errno 10013]
法1: 端口占用错误.换个端口即可. 新端口 在 8001到15536之间的任意值. 法2: windows下查看哪个程序占用端口 netstat -ano | findstr “8080” 找到p ...
- 使用python通过selenium模拟打开chrome窗口报错 出现 "您使用的是不受支持的命令行标记:--ignore-certificate-errors
#在程序前加上这段代码 from selenium import webdriver options = webdriver.ChromeOptions() options.add_experimen ...
- IIS发布,图片和样式显示不了的问题
今天本地IIS部署在visual stuio 2013里运行成功的一个项目时,出现了样式和图片显示不了的情况,如下图 所有页面的样式和图片不显示,刚开始以为是发布之后的图片和样式的文件夹没有权限,可是 ...
- Type-base dispatch
In the previous section we added two Time objects, but you also might want to add an integer to a Ti ...
- 洛谷P1465
P1465 序言页码 Preface Numbering 74通过 111提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 一类书 ...
- LARGE_INTEGER
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR ipCm ...
- ionic goto other page or alert
有时候需要 调试,这是就需要alert 的...可惜的是我不会angular 所以记录一下 .controller('mainctr', function($scope, $window) { $w ...
- CentOS下通过rdesktop连接Windows远程桌面
众所周知,微软的Windows提供了一种远程桌面系统(Remote Desktop),该服务的默认端口是3389,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件. 而要连接Windows ...
- Solaris的vi
进入输入模式i: 在光标之前插入a: 在光标之后插入o: 在下面新建一行输入I: 光标移动到本行首插入A: 光标移动到本行末尾插入O: 在上面新建一行输入 移动光标M:移到屏幕中间一行的行首L:移到屏 ...
- File Manager文件管理应用android源码
这个刚刚在安卓教程网那里看到的,File Manager文件管理应用android源码,这个是File Manager文件管理应用源码,源码filemanager,一个开源的文件管理器完整源码,文件查 ...