2011-07-11 32 views
0

Itrying從另一個進程中獲取字符串sysListView32。 該列表是一棵樹。第一列返回一個空字符串。 告訴我問題在哪裏?來自sysListView32樹的文本

樹的形象: tree 代碼:

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); 

回答

0

你沒有的VirtualAlloc在目標進程的內存塊,所以它不存在。

爲了不使用極端hackery來試圖獲得這個,爲什麼不使用其中一個可訪問性API來獲取這個信息的跨進程。 UIA,例如,下降到XP,並支持這一點:

http://msdn.microsoft.com/en-us/library/ms726294(VS.85).aspx

馬丁

+0

這難道不是在另一個進程的內存分配?vProcess = OpenProcess(PROCESS_VM_OPERATION .... vPointer = VirtualAllocEx(vProcess,.... – AlexGu

+0

)您是對的,我錯過了。但是,當vPointer不是源進程中的有效地址時,您將發送vPointer到SendMessage 我更新了我的觀點,你應該使用UIA –

+0

我運行了一個名爲UISpy.ehe的實用程序,它無法獲取第一列的文本,就像我的代碼一樣。 。空字符串... http://i.piccy.info/i5/26/21/1742126/Snymok5.png – AlexGu