C++ sysListView32树中的文本

C++ sysListView32树中的文本,c++,winapi,C++,Winapi,试图从另一个进程中从字符串sysListView32中获取。 列表是一棵树。对于第一列,返回一个空字符串。 告诉我问题出在哪里 树的图像: 代码: 您没有虚拟化目标进程中的内存块,因此它不存在 与其使用极端黑客来获取这些信息,为什么不使用一个可访问性API来跨进程获取这些信息呢。例如,UIA可以使用XP并支持以下功能: Martyn这不是另一个进程中的内存分配吗?vProcess=OpenProcess进程\虚拟机\操作。。。。vPointer=VirtualAllocEx vProcess,…

试图从另一个进程中从字符串sysListView32中获取。 列表是一棵树。对于第一列,返回一个空字符串。 告诉我问题出在哪里

树的图像: 代码:


您没有虚拟化目标进程中的内存块,因此它不存在

与其使用极端黑客来获取这些信息,为什么不使用一个可访问性API来跨进程获取这些信息呢。例如,UIA可以使用XP并支持以下功能:


Martyn

这不是另一个进程中的内存分配吗?vProcess=OpenProcess进程\虚拟机\操作。。。。vPointer=VirtualAllocEx vProcess,….你说得对,我错过了。但是,当vPointer不是源进程中的有效地址时,您正在向SendMessage发送vPointer。我重申我的信念,您应该使用UIA。我运行了一个名为UISpy.ehe的实用程序,它无法获得第一列的文本,就像我的代码一样。第二列通常读取我的代码…空字符串。。。
vProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ |
    PROCESS_VM_WRITE, False, vProcessId);
 vPointer = VirtualAllocEx(vProcess, NULL, 4096, MEM_RESERVE | MEM_COMMIT,
    PAGE_READWRITE);
 vItem.mask = LVIF_TEXT;
 vItem.iItem = I;
 vItem.iSubItem = J;
 vItem.cchTextMax = sizeof(vBuffer);
 vItem.pszText = (wchar_t*)vPointer +sizeof(TLVItem);
 WriteProcessMemory(vProcess, vPointer, &vItem, sizeof(TLVItem),
            &vNumberOfBytesRead);
 SendMessageW(mHandle, LVM_GETITEMW, I, (LPARAM)vPointer);
 ReadProcessMemory(vProcess, (wchar_t*)vPointer +sizeof(TLVItem),
            vBuffer, sizeof(vBuffer), &vNumberOfBytesRead);
 RESULT = UnicodeString(vBuffer);

 VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); // free mem
 CloseHandle(vProcess);