枚举托盘图标的方法网上有很多了,简单介绍流程
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) ) 得到图标相关的信息,用于判断是否是我想要的图标,
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 (托盘窗口,TB_BUTTONCOUNT ,0,0) 得到图标数量
SendMessage (托盘窗口, TB_GETBUTTON ,图标索引, 内存地址(TBBUTTON) ) 得到图标相关的信息,用于判断是否是我想要的图标,
到这里很简单,网上一堆,但是自己又不想移动鼠标去点击,想着用
SendMessage 实现
首先要获取图标的坐标,
从这里得到了自己想要的数据,eafK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3V1k6%4K9h3^5K6x3W2)9J5c8X3y4G2L8Y4c8J5L8$3I4K6i4K6u0r3N6r3u0Q4x3X3c8Y4k6i4c8T1N6i4c8@1L8$3^5`.
找到 TB_GETITEMRECT,发现可以获取到图标的坐标,
SendMessage (托盘窗口, TB_GETITEMRECT ,图标索引,内存地址(RECT) ) 得到坐标
SendMessage (托盘窗口, TB_GETITEMRECT ,图标索引,内存地址(RECT) ) 得到坐标
尝试, 直接发送
SendMessage
(
托盘窗口
, WM_LBUTTONDOWN / WM_LBUTTONUP, 1/0, MAKELPARAM (x, y)) 发现图标有反应,但是没响应单击事件
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2020-3-5 10:03
被游乐娃子编辑
,原因: BUG提交.