获取系统托盘信息

  • C#方式,参考链接(未验证):https://blog.csdn.net/yulinlover/article/details/3893302
  • C++方式,参考链接(已验证有效):https://www.cnblogs.com/likebeta/archive/2012/08/06/2625261.html
  • 但是C++方式的这篇文章有点问题,经过我改动后完全OK,修改后的代码如下:
  • #include <iostream>
    #include <windows.h>
    #include <tchar.h>
    #include <commctrl.h>
    using namespace std;
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    	int nRetCode = 0;
    	SIZE_T len = 256;
    	TCHAR * ptb = new TCHAR[256];
    	TCHAR * buf = new TCHAR[256];
    	SIZE_T size;
    	HWND hwnd = FindWindow(_T("Shell_TrayWnd"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, _T("TrayNotifyWnd"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, _T("SysPager"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, _T("ToolbarWindow32"), NULL);
    	HWND tool = hwnd;// (HWND)0x0004007C;
    	int lCount = SendMessage(tool, TB_BUTTONCOUNT, 0, 0);//   '获取托盘图标个数
    	RECT rccc;
    	GetWindowRect(hwnd, &rccc);
    	DWORD proID;
    	GetWindowThreadProcessId(tool, &proID);
    	HANDLE hPro = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, NULL, proID);
    	PVOID pBun = VirtualAllocEx(hPro, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	PVOID pText = VirtualAllocEx(hPro, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	UINT buffer = len;
    	for (int j = 0; j < lCount; j++)
    	{
    		DWORD si = SendMessage(tool, TB_GETRECT, (WPARAM)j, (LPARAM)pBun);
    		si = SendMessage(tool, TB_GETBUTTONTEXT, (WPARAM)j, (LPARAM)pText);
    
    		ReadProcessMemory(hPro, pBun, (LPVOID)ptb, len, &size);
    		ReadProcessMemory(hPro, pText, (LPVOID)buf, len, &size);
    
    		LPRECT pRect = (LPRECT)ptb;
    		OffsetRect(pRect, rccc.left, rccc.top);
    		cout << buf << endl;
    		cout << (*pRect).left << endl << (*pRect).top << endl << (*pRect).right << endl << (*pRect).bottom << endl;
    
    	}
    
    	VirtualFreeEx(hPro, pBun, len, MEM_DECOMMIT);
    	VirtualFreeEx(hPro, pText, len, MEM_COMMIT);
    
    	delete ptb;
    
    	return nRetCode;
    }

    最完美C++版本,还考虑到了溢出托盘区:https://blog.csdn.net/hzy694358/article/details/7400284

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值