想在自己进程中获取其他进程里的树形控件(SysTreeView32)的内容。比如使用TVM_GETITEM消息获取某一节点数据。
思路很简单,由于是将消息发给另一个进程来处理,传递的指针的值应该是相对于目标进程地址空间中的,所以需要把在目标进程中申请空间。
VirtualAllocEx(m_hProcess, NULL, sizeof(T), MEM_COMMIT, PAGE_READWRITE);
然后将返回的地址作为消息的附加参数发送给目标进程,待消息返回后,我们再读取出消息处理的结果。
当我在使用TVM_GETITEM消息时却发现SendMessage返回值是0,目标进程处理消息失败了,最大的可能就是我们申请的内存有问题。
google了一下,还真找到了帖子,上面说windows公用控件(common controls)消息处理是区分UNICODE和ASCII编码的,而且还要考虑目标进程是否是64位进程,32位和64位某些数据类型长度是不同的。
将自己写的进程改为64位,终于返回1了。