详解XP托盘图标结构!

下面是转摘。

但是开发的时候要注意 64位系统和32位系统 的数据结构不一致 


详解XP托盘图标结构。

关于这个标题,纯粹是标题党的作为,因为我还没有这个资格是说“详解”,只是能说是我自己一些见解!
近日因为要更新一个托盘管理的软件,所以要苦下头翻译一个国外的托盘结构获取的经典软件(C++版)(http://www.codeproject.com/KB/applications/ShellTrayInfo.aspx),在翻译过程有一些自己体会,所写在这里给大家一起讨论。

首先它的这个软件用到一个结构,据说是一个未公开的托盘结构。
原版为:
struct TRAYDATA
{
HWND hwnd;    
UINT uID;    
UINT uCallbackMessage; 
DWORD Reserved[2];  
HICON hIcon;    
};
后经过试验,发现在XP下结构是应该还包括一个路径参数,但2000下是没有的。
Public Type TRAYDATA
    hwnd              As Long
    uId               As Long
    uCallBackMessage As Long
    Reserved1(0 To 1) As Long
    hIcon             As Long
    Reserved2(0 To 5) As Integer
    ExePath(0 To 255) As Byte
End Type
至于怎样得到这个结构,这就得借用一个TBBUTTON结构(结构如下),因为这结构的dwData指示TRAYDATA所在位置。
Public Type TBBUTTON
    iBitmap         As Long
    idCommand       As Long
    fsState         As Byte
    fsStyle         As Byte
    bReserved1      As Byte
    bReserved2      As Byte
    dwData          As Long '这个指示了TRAYDATA的位置。
    iString         As Long
End Type

综上所述,我们可以这样得到以下结论:
得到以下流程图。

"Shell_TrayWnd" -> "TrayNotifyWnd" -> "SysPager" -> "ToolbarWindow32"最终得到托盘窗口句柄 -> 通过发送 TB_BUTTONCOUNT消息得到托盘窗口TBBUTTON的个数 -> 通过得到总数,用FOR循环,向每个BUTTON发送TB_GETBUTTON消息 -> 用ReadProcessMemory读取每个TBBUTTON结构 -> 再通过TBBUTTON.dwData 得到TRAYDATA结构。

只要得到这个结构,那么托盘的图标,就任我为所欲为了,修改图标,隐藏图标,右移图标小事一件了。。

下面是模仿C++测试软件(改天发布一个我已写完的更多功能桌面托盘管理软件):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值