hWnd = ::FindWindow("Shell_TrayWnd", NULL);
hWnd = ::FindWindowEx(hWnd, 0, "TrayNotifyWnd", NULL); hWndTmp = ::FindWindowEx(hWnd, 0, "SysPager", NULL);
if(!hWndTmp)
hWnd = ::FindWindowEx(hWnd, 0, "ToolbarWindow32", NULL);
else
hWnd = ::FindWindowEx(hWndTmp, 0, "ToolbarWindow32", NULL); ret = ::GetWindowThreadProcessId(hWnd, &lngPID); hProcess = ::OpenProcess(PROCESS_ALL_ACCESS
|PROCESS_VM_OPERATION
|PROCESS_VM_READ
|PROCESS_VM_WRITE,
0,
lngPID); lngAddress = VirtualAllocEx(hProcess,  0,  0x4096, MEM_COMMIT, PAGE_READWRITE);
        //(1)这个分配内存干什么?
lngButtons = ::SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);//获取图标总数 for(int i=0;i<lngButtons;i++)//lngButtons相当于图标的id
{
::SendMessage(hWnd,TB_GETBUTTON,i,long(lngAddress));
            //(2)TB_GETBUTTON消息获取到的是_TBBUTTON结构的内容 还是结构的地址啊???   在下面好像没有用处啊?
 ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress) + 10), strBuff, 1024, 0);  MessageBox(strBuff);//(3)这个为什么显示的内容是空啊! 我要获取到 鼠标移到托盘图标时提示的信息 }/*结构是这样定义的
typedef struct _TBBUTTON {
int iBitmap;// zero-based index of button image
int idCommand;  // command to be sent when button pressed
BYTE fsState;   // button state--see below
BYTE fsStyle;   // button style--see below
DWORD dwData;   // application-defined value
int iString;// zero-based index of button label string
} TBBUTTON;*/
 请回到我上面的3个问题! 谢谢!!!!

解决方案 »

  1.   

    1)lngAddress 用于获取_TBBUTTON结构内容的缓冲区
    2)获取的内容
    3)调试看ReadProcessMemory返回值
      

  2.   

    LPVOID lngAddress;
    ::SendMessage(hWnd,TB_GETBUTTON,i,long(lngAddress));
    这内容怎么取出来? ReadProcessMemory执行成功啦   但就是内容位空 如果 LPVOID(long(lngAddress) + 12 的话  内容就位乱码啦!.
      

  3.   

    ::SendMessage(hWnd,TB_GETBUTTON,i,long(lngAddress)); 
    操作系统自动把TBUTTON结构填充到lngAddress内存中。乱码问题,可能是SendMessage返回没成功?看下返回值是什么。