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