前言

使用过360或者腾讯电脑管家的人(较新版本的对应软件)应该都见过他的一个新功能,那就是托盘嵌入悬浮球,这东西怎么说呢,真是把悬浮球玩出花样了,又搞出了新的交互模式。不得不佩服这些老Windows开发(不知道他们当初去腾讯或者360的时候是不是windows开发还是热门啊),毕竟和杀毒软件这种对系统核心需要很深层次了解的东西对比起来,这种对 windows Shell 很深层次的了解对他们而言应该算是小菜一碟。

这个就是电脑管家的嵌入托盘,不了解windows的开发者可能还好,觉得这个就和托盘图标一个样,但是对于有一些windows开发经验的人而言,这东西可头疼了,他不是 NotificationIcon 不是 Deskband ,你甚至无法知道这种模式的学名叫什么,因为他肯定不是windows推荐的交互模式,或者说他可能有像 Deskabnd 一样的COM扩展方式,但是你无法查到(毕竟windows的系统图标很多都是这种的,使用spy++在”Tray_ShellWnd“下可以看到他们)。不过好在天无绝人之路,我思考这个问题思考了两年了,上大学就在想,但因为一开始接触的不是WinAPI或者MFC的那种比较低级的Windows开发,使我对一些WindowsAPI比较陌生,始终没办法做出来这个东西。最近在GitHub上找到一个T-Clock的项目,他的功能是定制系统时钟

这个功能已经和我想要的很接近了,毕竟它里面肯定有如何改变任务栏嵌入窗体宽度的代码。于是在经过一番研究后,我弄出了一个简陋的可以将WPF窗体嵌入通知区域的程序。
下面我就不说什么废话了

预览


这个是使用 WPF 按钮做的一个小控件没有关联其他任何事件。效果已经非常接近360或者管家的样子了。

说明

下面先说明一下:

  • 这个控件应该还有很多BUG,但是我不一定有时间试和改,如果不放心我搬的代码的话可以去找T-Clock自己改,毕竟我看面向过程代码真的能力有限,有漏掉什么也说不定。
  • 这个东西在和管家或者360同时打开时位置计算会出问题,这个就要你自己改了,我想应该可以在原先调整位置的WM_NOTIFY事件里去找下有没有360或者管家的窗体然后重新计算下需不需要在我们的subclassproc里去加那个空间(我没试过360能不能和管家共存,但我觉得不会有人同时装这两个吧。)
  • 在改变任务栏布局时(水平或者竖直)会出问题,问题很严重。目前我觉得唯一可行的办法就是再钩个任务栏的窗体过程,去里面挂钩鼠标左键按下事件,在事件触发后不刷新我们的图标,而在鼠标左键抬起后PostMessage给我们的图标进行刷新。
  • 由于我不太会使用VS的C++我里面使用spdlog而且也添加头文件了,但是VS一会能识别一会识别不了,我也很无奈。
  • 最好在一个窗体中去试这个窗体,退出时一定不要用Stop Debug退出,这要会导致dll没法脱钩,你得重启explorer。因为脱钩得调我的dispose,但Stop Debug没法触发那个事件,一旦退出。dll的引用计数就有偏差了。

这个说明只是想告诉读者,如果你的精力有限,或者windows开发方面的知识比较浅薄,又或者怕麻烦不愿意一次次调试,还是不要碰这个东西为好,要不然弄得你电脑反复重启explorer你还要来骂我。


关于windows任务栏的扩展,算上我前面的文章应该是全了。(除了taskbar的鼠标悬停预览小窗体)DeskBand即上图1区域,NotifyIcon即上图2区域(没啥好说的,Winform封装好的),今天这个就是上图3区域的扩展。
(嘿嘿,那个雷达是我改的SSR的可视化)

实现原理简要说明

代码我放在Github上了(如果这个东西确实帮到你的话,可以给个星,在这多谢了,毕竟这个资料真的很少,找的我好辛苦,都是翻Google6-7页才找到的,不像DeskBand还有那么点线索 ) 在里面搜TrayEmbeddedWindow具体怎么操作看注释,然后搜hsystrayembed整个项目msvc编译,这是用来注入的DLL(生成时注意位数和主窗口一致也不要改名字,或者你得在代码里也改,不然loadlibrary会失败),因为这个东西搞不好会让你的explorer崩溃,所以还是有一定开发经验的同道们使用起来比较好,不推荐新手接触。
原理主要就是用一个 Native 的 DLL 去做注入(SetWindowHookEx WH_CALLWNDPROC)(因为不允许托管dll做注入,托管DLL只能做全局钩子)

  • 先注入任务栏中随便一个窗口,然后通过注入的窗体过程去找一个你要放你嵌入窗体的位置旁边的窗体,比如我选的是输入法(用spy++去找)。
  • 然后SubClass任务栏通知区域(TrayNotifyWnd),处理其:
    WM_USER + 100 :这是任务栏布局时询问其子窗体大小变化的消息,可以在此消息中修改其返回值让任务栏留出你所要的空间大小
    WM_NOTIFY 在这个事件中重新布局窗体,将你的窗体放置在该放的地方
  • 主窗体启动时调用DLL中的export方法进行上述操作,并在其SubClass完后取消挂钩,然后将自身大小以自定义消息发送过去,使其重新布局。
  • 主窗体退出时调用DLL中的export方法,取消subclass,清空dll中指针变量,主窗体释放非托管资源,主窗体空置托管指针变量。

其中最主要的还是那两个消息,这是我以前一直能挂钩到窗体过程却实现不了这个效果的主要原因,还有就是如果你有能力一定要仔细改改,现在我代码肯定有许多问题只是我还没有试出来而已。

[.NET Desktop] 类似于360或者腾讯电脑管家的托盘嵌入程序(目前不稳定)相关推荐

  1. 利用nps_payload 免杀360,腾讯电脑管家

    利用nps_payload 免杀360,腾讯电脑管家 一.nps_payload介绍 nps_payload是2017年开源的工具,安装使用都比较简单,nps_payload可以生成基于msbuild ...

  2. 现在电脑有必要安装360或者腾讯电脑管家吗?

    没有太大必要,但具体装不装看自己的需求,无论是360安全卫士还是腾讯电脑管家目前的功能都不仅仅只有杀毒以及防护的功能,里面还有一些其他的小功能使用起来也不错.为什么没有太大的必要装360安全卫士以及腾 ...

  3. 程序员还在用360,腾讯电脑管家清理注册表,清理垃圾?只能说你太low

    首先明明电脑上,就有清理垃圾和无用注册表的功能,只是我么缺少发现美的眼睛. 为什么不用360,腾讯全家桶. 那玩意固然香,而且真香,但是后台占用率太高,作为一个有洁癖的我,实在是不想看到自己右下角多一 ...

  4. 山寨版360安全卫士 腾讯电脑管家开源(.NET实现)

    还记得2011年9月份,我在上大四,本来想着考研能上个好点的学校,可我怎么就不愿去自习室上自习.每天晚上睡觉前都告诉自己明天早晨一定早起去上自习,但又每次醒来都不想起床啊,懒,没办法.睡到不想再睡了才 ...

  5. 360团队 临时目录的原始文件不是360合法文件_谈谈腾讯电脑管家小团队版

    这段时间没事去腾讯电脑管家官网逛了逛. 有新的发现. 电脑管家推出了企业版和小团队版. 说实话,这个东西我期待很久了. 360安全卫士推出类似版本已经好几年了. 考虑360卫士误报误杀率太高,我一直没 ...

  6. 360腾讯计算机比赛,XP挑战赛:腾讯电脑管家完胜360 XP盾甲

    腾讯电脑管家表现出众,拦截了10个所有测试漏洞,防护成功率为100%;金山防护盾仅错失1个漏洞,防护成功率为90%. 当前金山.360.腾讯等主流安全厂商均针对此发布了XP防护系列专门产品,其防护能力 ...

  7. 奇虎360软件阻止腾讯电脑管家启动,3Q大战将再度上演?

    今天下午值班,使用同事的电脑上网.开机进入桌面后看见系统托盘区冒出360安全卫士和360杀毒软件的图标,立马全部退出.到腾讯电脑管家官网下载了安装程序进行安装. 安装程序窗口在安装进度达到99%后,忽 ...

  8. 腾讯电脑管家,vs安装文件报成木马,还能信吗?

    今天在公司安装vs2013,安装过程中腾讯公司的产品"电脑管家"提示有新版本,没有犹豫的点了升级,完成后直接在管家主界面上点了"全面体检"按钮,这一点不要紧,报 ...

  9. 腾讯电脑管家有病毒并已致歉?“火绒安全”到底是什么来头?

    提起安全软件,大家首先想到的是腾讯以及360管家.但是,近期一款名为"火绒安全"的软件杀出重围,多次以有病毒为由将腾讯电脑管家拦截在外! 不过,作为安全行业大佬的腾讯电脑管家在事情 ...

最新文章

  1. 使用Native API 创建进程
  2. 06-机器学习(Haar+Adaboost实现人脸、人眼检测)
  3. oracle删除当前用户下所有表
  4. Any-Proxy在线反向代理源码
  5. Ubuntu下安装中文输入法
  6. hdu 1083 Courses
  7. java开发mac pro_苹果三款神秘 Mac 现身 macOS Big Sur 11.0.1 beta
  8. 深入浅出设计模式之工厂模式
  9. 新浪微博大v博客信息抓取与活跃度清博指数BCI分析Python
  10. python如何输出整数_如何根据Python中的输入输出整数和浮点值?
  11. [MQ]什么是消息队列?
  12. 园区SDN网络自动化能力优化思路
  13. 淘宝商品详情,1688商品详情滑块的解决方法和接口
  14. 为什么百度蜘蛛不对网站进行抓取?
  15. 大天使之剑h5服务器临时维护,《大天使之剑H5》2月28日维护更新公告
  16. 资深投资人“厂长”沈忱:布局区块链就是在布局新的工业革命
  17. 西安音乐学院人计算机学院,西安音乐学院.我校5部作品“中国大学生计算机设计大赛”获奖...
  18. 说好的9月底谈薪,这都10月底了,今天又是没等到HR?大家来说说原因?
  19. ENVI对GF-5高光谱数据进行FLAASH大气校正
  20. UML系列图——用例图(Use Case)

热门文章

  1. 腐败团--铁锅门养生香辣馆
  2. 比尔.盖茨哭了——微软全部序列号
  3. 电脑如何处理手机上的文件
  4. 字节跳动教育版图:遍地撒种子
  5. 一起回味肝肠寸断的古人情诗
  6. 常见的网站服务器环境搭建
  7. 人工智能成最强“风口” 基金多路径布局
  8. php 开发高德地图地理围栏,移动端地理围栏
  9. SAP Web Service简介与配置方法
  10. 紫光展锐展讯SPRD刷机包pac文件解包提取img步骤