admin 管理员组

文章数量: 1184232

曾经写过一篇 ,其实那篇文章讲的是如何将我们自己的程序最小化到托盘并进行操作的编程方法。前两天看到 里有人讨论如何隐藏托盘图标,记得从前为朋友写过一个隐藏大智慧软件的程序,采用的方法就是将窗口最小化并隐藏大智慧在托盘上的图标,但是因为涉及到键盘钩子,最后并没有这么做,而是用 的方法达到了效果。

看到这篇 ,依稀想起我曾经做过的一些尝试,平时总是没有动力整理一些零碎的代码,这回碰到了也算给自己一个机会。
首先用Spy++查找一下系统托盘所在的窗口类:

我们的目标是隐藏系统托盘图标,很明显是一个跨进程操作,因此要明白是哪个进程在维护这些图标,知道了窗口的句柄,获取其背后的进程就比较容易了:

首先获取进程ID,然后打开进程,获取进程句柄。
接着在进程内分配一段内存:

并向窗口发送TB_GETBUTTON消息,获得托盘Button的信息,这里的lngAddress中存储的是TBBUTTON结构,其内容如下:

当鼠标移动到系统托盘图标上后,会有一些提示信息,这些信息保存在dwData中,而idCommand则是TBBUTTON的id,我们要隐藏或者显示图标,都要针对这个图标id进行操作:

strBuffer中存放提示信息,lngButtonID中存放id,有了这些信息,要操作托盘图标就非常简单了,例如我可以
根据某些条件匹配strBuffer,然后根据相应的lngButtonID隐藏图标,隐藏或者显示图标是发送TB_HIDEBUTTON消息。

当操作完成后,记得做清理工作:

上面仅仅是针对一个图标的操作,其实可以发送TB_BUTTONCOUNT消息,获得图标数量,然后循环处理。 是我写的一个
sample,其中第一列显示的是图标id,第二列显示的是图标提示信息,在ListBox上选取,然后可以点击隐藏,恢复。

本文标签: 托盘图标 编程 消息