欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]系统托盘图标隐藏(删除)

[原创]系统托盘图标隐藏(删除)

为了在某计算机上建立一个隐蔽的Wifi,所以面对可恶的托盘图标,令我不得不考虑写个程序将其Hide掉,以免后患。
于是开始了大量的谷歌与 百度,看下前人是如何去做的。站在巨人的肩膀不是看得更远嘛。
首先我们了解到托盘区似乎是个窗口性质的东西,于是乎,操起Spy++查查到底是什么情况。
很清晰的窗口所属结构,只要我们一次通过FindWindow()和FindWindowEx()依次从窗口类为Shell_TrayWnd ->SysPager ->ToolbrWindow32,得到最终句柄,然后通过发送 TB_BUTTONCOUNT消息得到托盘窗口TBBUTTON的个数  ->  通过得到总数,遍历所有按钮,向每个BUTTON发送TB_GETBUTTON消息 获得按钮 ->  用ReadProcessMemory读取每个TBBUTTON结构  ->  再通过TBBUTTON.dwData 得到TRAYDATA结构。
这里不得不提一下TRAYDATA,据说这是一个从未公开的结构

struct TRAYDATA { 
HWND hwnd;
UINT uID;
UINT uCallbackMessage;
DWORD Reserved[2];
HICON hIcon;
};

可我们怎么找到他呢?他的信息在TBBUTON结构中的dwData
typedef struct {
  int       iBitmap;
  int       idCommand;
  BYTE      fsState;
  BYTE      fsStyle;
#ifdef _WIN64
  BYTE      bReserved[6];
#else 
#if defined(_WIN32)
  BYTE      bReserved[2];
#endif 
#endif 
  DWORD_PTR dwData;
  INT_PTR   iString;
} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;

然后我们可以根据他获得信息填充下NOTIFYICONDATA结构体
//系统定义结构体
typedef struct _NOTIFYICONDATA    
{    
 DWORD cbSize; //以字节为单位的这个结构的大小 
 HWND hWnd; //接收托盘图标通知消息的窗口句柄 
 UINT uID; //应用程序定义的该图标的ID号 
 UINT uFlags; //设置该图标的属性 
 UINT uCallbackMessage; //应用程序定义的消息ID号,此消息传递给hWnd 
 HICON hIcon; //图标的句柄 
 char szTip[64]; //鼠标停留在图标上显示的提示信息 
} NOTIFYICONDATA, *PNOTIFYICONDATA;
/*
该结构中,成员uFlags可以使下列之一或组合:
   NIF_ICON 设置成员hIcon有效
   NIF_MESSAGE 设置成员uCallbackMessage有效
   NIF_TIP 设置成员szTip有效
*/

以便我们在使用Shell_NotifyIcon()函数时调用,而此函数作用是在托盘上增加,删掉等作用的函数。
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid);
/*
---Pnid是NOTIFYICONDATA结构的指针; dwMessage是被传递的消息,可以是以下消息之一: 
   NIM_ADD 增加图标
   NIM_DELETE 删除图标
   NIM_MODIFY 修改图标
*/

但是有的时候我们可能不希望删除所有的托盘图标,所以我们要判断下他的文本,在TRAYDATA结构体中的szTip来确认是哪个按钮,如果是他就删掉他,这个判断加在执行Shell_NotifyIcon()前面,如果符合,则执行Shell_NotifyIcon()。
转自我自己的博客:http://www.cnblogs.com/croot/p/3496576.html
以上内容纯属理论,不到之处还望多多包涵。有错误更希望各位大神指出。谢谢!
最后还留下一个疑问,就是不知道怎么调试,而找到TRAYDATA这个结构体的,之前看到一段代码,他是不断的读内存,读的我发晕。所以才怀疑是一段结构体,才搜到了该秘闻。还望各位大牛指点一下。
参考于:http://www.codeproject.com/KB/applications/ShellTrayInfo.aspx

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功