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个问题! 谢谢!!!!
解决方案 »
- VC++6.0中添加的成员变量如何删除?
- MFC怎样判断一个文件夹是否为虚拟文件夹?
- 怎么分格,16进地址字符啊?
- 如何建立一个这样的list control控件?带有可打勾的多选择项小方块出现在第一列。并且如何来判断某一(几)项被选择,谢谢
- Editcontrol的问题,散分求助
- 求助:关于AddNew()的问题
- 请问:如何从EXE把一个对象传入DLL文件的接口函数呢〉
- 如何把加入到控件栏里的mscommon控件删掉?
- 如何用MCI设备播放远程视频文件?一定给分的!!!
- 求教:麻烦帮忙看看为什么信号量变负后线程没有挂起,要崩溃了
- 请问一下 _beginthreadex 可以启动继承 CWinThread 的 线程类吗?怎么启动??
- 关于软件界面的问题
2)获取的内容
3)调试看ReadProcessMemory返回值
::SendMessage(hWnd,TB_GETBUTTON,i,long(lngAddress));
这内容怎么取出来? ReadProcessMemory执行成功啦 但就是内容位空 如果 LPVOID(long(lngAddress) + 12 的话 内容就位乱码啦!.
操作系统自动把TBUTTON结构填充到lngAddress内存中。乱码问题,可能是SendMessage返回没成功?看下返回值是什么。