虚拟内存获取其他进程数据的问题

想在自己进程中获取其他进程里的树形控件(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了。

http://stackoverflow.com/questions/2244037/why-does-the-tvm-getitem-message-fail-on-comctl32-ocx-or-mscomctl-ocx-tree-views

原文地址:https://www.cnblogs.com/aishangxue/p/3594990.html