获取系统托盘图标的坐标及文本

#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)0x0004007C;
    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<9;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;
}

win问题: http://blog.csdn.net/hzy694358/article/details/7400284

posted @ 2012-08-06 15:30  likebeta  阅读(2356)  评论(0编辑  收藏  举报