vb隐藏指定程序系统托盘图标_Windows环境设置系统托盘图标默认显示
Windows环境设置系统托盘图标默认显示
背景
QQ、微信等IM软件通常都会在任务栏系统托盘处添加一个图标,用于提示新消息或方便将隐藏的窗口显示出来,但Windows有默认的设置,将不常用的图标隐藏到托盘仓中,即使有消息,系统托盘也不会显示出来。以后有人说我不回消息,其实是有原因的
。
最近有个项目团队开发的客户端程序,希望将这个系统托盘默认显示出来,我自己下来研究了一下,开发了一个程序可以实现。先看效果图,请注意看任务托盘:
Win7
Windows7下可以完美支持,不用重启资源管理器。
Win10
为啥闪一下后面解释。
解决过程
听到这个需求后,大部分人应该首先会想到修改注册表,但是修改注册表在操作系统层面上需要获取管理员权限,操作体验不好,所以首先放弃了直接修改注册表的方式,在网上查找资料后,发现了这几篇帖子,实现通过API来将某个图标设置始终显示,帖子如下:
https://gist.github.com/ysc3839/25e8ed113c4e975b6781c9759ed4ee87
https://hianz.wordpress.com/2013/09/03/new-windows-tray-notification-manager-is-here/
说干就干,根据提供的C++代码,在VS下新建工程,编译了可执行程序(ShowTray.exe),经过验证在win7下没问题,但是在Win10下无效,why?然后看到。。。
有点崩溃啊。。。,win10 1709后,偷偷的修改了API,原来的方法失效了。
继续google,了解到托盘显示状态是存储在计算机\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
下的IconStreams
键值里,但是是以二进制的方式存储的,无法直接解析。
就在山穷水尽之时,又扒出了两个帖子,可以修改注册表来修改系统托盘,但是一个是powershell脚本,一个是C#实现的。
https://stackoverflow.com/questions/7877435/set-tray-icon-to-always-show
https://github.com/lestert2005/SystemTrayModder/blob/b1061f3758f8ff9c43d77157c7a62c7e5cc6885d/source/Program.cs
看了一下具体实现,觉得移植到C++有点困难(C++学得太渣),就还是基于C#的版本改造了一下,打成了一个C#的exe(Win10ShowTray.exe)。改完注册表,需要重启一下资源管理器,所以要闪一下。
ok,同时修改ShowTray,大功搞成了。整体工程如下:
依赖关系为:
ShowTray.exe为程序入口,启动时判断操作系统,如果是win7则按原来的方式运行,如果是win10则启动Win10ShowTray.exe。
使用方法
程序启动有两个参数:
ShowTray.exe (应用程序exe名称) [应用程序exe名称编码字符]
•参数1 : 应用程序exe名称,必填,拖托盘程序名称。•参数2 : 应用程序exe名称,非必填,拖托盘程序名称对应注册表中的编码,如果程序名称不包括中文则不传。参考特殊情况部分
特殊情况
当出现托盘程序为中文的情况时,win10环境会出现问题,原因是文件名成编码和在注册表中找不到,我自己测试了各种编码方式,都无法和注册表中的字符匹配,所以找了一个折中的方案,将编码好后的文件名称传入程序,即第二个参数。
这个参数的获取方式如下。
•先删除\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
下的IconStreams
键值,并重启资源管理器。
•将exe文件复制一个,文件名前后加若干个-
,例如-----XXX-----.exe
,并执行后执行。
•执行regedit
打开注册表,找到IconStreams
键值,双击打开,在右侧的文本区域查找-----
的字符,如下图,到这里,已经完成了90%了,可以看到-
字符为2d00
,找到2d00
中间的字符,如下图的7353e5772d007a66fd80a9524b62
•.exe
的固定编码为2e0072006b007200
,到此,可以得到编码后的名称为7353e5772d007a66fd80a9524b622e0072006b007200
,这个值就是第二个参数。
PS
可能会出现360拦截的情况,这个可以参考[自己生成的EXE文件,总是被360拦截怎么办?https://bbs.360.cn/thread-15256171-1-1.html]可能不奏效。大家如果有更好的方式,欢迎交流。
作者介绍
贾乐:北京华宇信息成都研发中心架构师,已婚,勿念。
vb隐藏指定程序系统托盘图标_Windows环境设置系统托盘图标默认显示相关推荐
- video 设置 poster,默认显示视频第一帧
video 设置 poster,默认显示视频第一帧 <video:src="videoUrl":poster="videoUrl + '?x-oss-process ...
- Dev++ 环境设置C语言关键字显示颜色
Dev++ 环境下设置C语言关键字显示颜色或高亮显示 在默认的状态下,c语言关键字的颜色是黑色的,在写程序时不好区分关键字和变量,所以设置一下颜色会好看点. 1.点击工具->编辑器选项 2.选择 ...
- PL/SQL如何设置 窗口列表默认显示
每次使用PL/SQL的时候总是要去打开Window List,十分麻烦,今天在网上找到了解决方法,如下 在工具中调出窗口列表后,再点击窗口-保存版面(S)
- C语言的下载和环境设置
C语言的下载和环境设置 系统为Windows,在在 Windows 上安装 GCC,您需要安装 MinGW.为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinG ...
- python为源文件指定系统默认_Python 设置系统默认编码
python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...
- 打印技术之获取及设置系统默认打印机
http://www.cnblogs.com/menlsh/p/4189126.html 本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用En ...
- 【打印技术01】获取及设置系统默认打印机
本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: 1 ...
- 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机
本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: 1 ...
- 5.6 date:显示与设置系统时间
date命令 用于显示当前的系统时间或设置系统时间. date [选项] +[日期格式] date命令的参数选项及说明 OPTION参数选项-d 时间字符串 显示指定字符串所描述的时间,而非当前时间 ...
最新文章
- sklearn.naive_bayes
- 子div在父div中置底
- springboot上传文件同时传参数_Spring Boot 系列:使用 Spring Boot 上传文件
- mysql中 视图的优缺点_SQL中使用视图的优点和缺点是什么
- 计算机表情识别技术研究学什么,表情识别的图像预处理和特征提取方法研究
- mysql 导出表数据表结构
- 轻松三步教你配置oracle,Oracle Net Configuration Assistant 配置步骤简明教程
- LINUX C#安装开发工具MonoDevelop
- java gb28181网关_视频网关GB28181协议转换解决方案
- Win11桌面便签小工具下载 支持与手机同步的桌面便签工具下载
- 怎样解题 --解题表(how to solve it)
- 计算机exsl表f4代表锁定,Excel中F4技巧,相对引用、绝对引用和混合引用
- 一切归零,一切从这里开始
- ChatGPT修bug横扫全场,准确率达78%!程序员喜忧参半
- printf 输出多行字符串
- 二极管分类、符号、型号及作用
- 浅谈语音信号处理系列之二 语音信号处理的基础
- 点击编辑框全选内容java,js实现鼠标点击文本框自动选中内容的方法
- IDEA Git操作(三)使用 cherry-pick、交互式 rebase 自由修改提交树
- 养猫日记-20200430
热门文章
- php 数组去重且不保留,php数组去重并计数求和如何操作
- RTT的IPC机制篇——IPC通信总结
- CCF201612-2 工资计算
- 江西师范大学2017年C语言考试,2018年江西师范大学程序设计(C语言)考研初试大纲...
- MySQL INSERT的4种形态
- 聊聊数仓中TPCD-DSTPC-H与查询性能的那些事儿
- 开发者说:愿为你点亮“懂环境知冷暖”智能的灯
- 史上规模最大的中文知识图谱以及估值两个亿的 AI 核心代码
- 深度学习在其他领域的应用1:密码破解
- 带着canvas去流浪系列之九 粒子动画