首页
社区
课程
招聘
[原创]关于托盘图标的模拟点击 SendMessage
发表于: 2020-3-5 06:31 5144

[原创]关于托盘图标的模拟点击 SendMessage

2020-3-5 06:31
5144
枚举托盘图标的方法网上有很多了,简单介绍流程
FindWindowEx : Shell_TrayWnd->TrayNotifyWnd->SysPager->ToolbarWindow32 得到[托盘窗口]句柄
GetWindowThreadProcessId( 托盘窗口 ,PID) 得到桌面进程,然后申请一块内存[内存地址]用于保存SendMessage TB_GETBUTTON  返回的结构[ TBBUTTON ]
typedef struct _TBBUTTON {
  int       iBitmap;
  int       idCommand;
  BYTE      fsState;
  BYTE      fsStyle;
#if ...
  BYTE      bReserved[6];
#else
  BYTE      bReserved[2];
#endif
  DWORD_PTR dwData; //一般为 TRAYDATA 结构
  INT_PTR   iString;//图标标题 
} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;

struct TRAYDATA  
{  
    HWND hwnd;                                 
    UINT uID;                                 
    UINT uCallbackMessage;         
    DWORD Reserved[2];                 
    HICON hIcon;                                 
};  
SendMessage (托盘窗口,TB_BUTTONCOUNT ,0,0) 得到图标数量  
SendMessage (托盘窗口, TB_GETBUTTON ,图标索引, 内存地址(TBBUTTON)  ) 得到图标相关的信息,用于判断是否是我想要的图标,

到这里很简单,网上一堆,但是自己又不想移动鼠标去点击,想着用 SendMessage 实现
首先要获取图标的坐标,
从这里得到了自己想要的数据,https://docs.microsoft.com/en-us/windows/win32/controls/tb-getbutton
找到 TB_GETITEMRECT,发现可以获取到图标的坐标,
SendMessage (托盘窗口, TB_GETITEMRECT ,图标索引,内存地址(RECT)  ) 得到坐标

尝试, 直接发送  SendMessage ( 托盘窗口 , WM_LBUTTONDOWN / WM_LBUTTONUP, 1/0, MAKELPARAM (x, y)) 发现图标有反应,但是没响应单击事件
慢慢翻,找到了这个 TB_SETHOTITEM,然后配合鼠标单击消息

SendMessage (托盘窗口, TB_SETHOTITEM ,图标索引,0  ) 
SendMessage(托盘窗口, WM_LBUTTONDOWN / WM_LBUTTONUP, 1/0, MAKELPARAM (x, y)) 


成功激活单击事件.
关键点就在于  TB_SETHOTITEM 先设置指定图标为激活状态.
有人说不灵,重新测试了下,发现只有QQ有反应,其他的没反应.
测试的时候用的QQ托盘测试[em_85]
TB_SETHOTITEM 没达到想要的效果.
右键消息是可以发送成功的,而且不用TB_SETHOTITEM 
有空在弄!




[课程]FART 脱壳王!加量不加价!FART作者讲授!

最后于 2020-3-5 10:03 被游乐娃子编辑 ,原因: BUG提交.
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
个人愚见,能不能用spy++看看鼠标点击托盘图标是,具体都有哪些消息了,然后在模拟这些消息
2020-3-5 13:33
0
游客
登录 | 注册 方可回帖
返回
//