2011-07-11 7 views
0

他のプロセスから文字列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のはなかったです。

極端なハッカーを使用してこれを取得しようとするのではなく、アクセシビリティAPIの1つを使用してこの情報を処理しないでください。 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という名前のユーティリティを実行しましたが、私のコードと同じように、最初の列のテキストを取得できません。 .Empty strings ... http://i.piccy.info/i5/26/21/1742126/Snymok5.png – AlexGu