![]() |
Fremde Listview auslesen
Hallo allerseits.
Ich steh hier vor dem Problem eine fremde Listview (Das Fremd Programm ist in VB6 programmiert(Listview Ansi)) auszulesen. Mit Winspy (2.03.523) klappt das perfekt. Das Handle der Listview wird auch richtig erkannt . Nur die Items werden nicht ausgelesen. Ich benutze folgenden Code um die Items auszulesen.
Code:
function ListViewColumnCount(mHandle: hwnd): Integer;
begin Result := Header_GetItemCount(ListView_GetHeader(mHandle)); // Funktioniert! end;
Code:
Das seltsame ist wenn ich das mit einer Delphi fremd Application teste wird die Listview sauber ausgelesen.
function GetListViewText(mHandle: hwnd; mStrings: TStrings): Boolean;
var vColumnCount: Integer; vItemCount: Integer; I, J: Integer; vBuffer: array[0..255] of Char; vPRocessId: DWord; vProcess: THandle; vPointer: Pointer; vNumberOfBytesRead: SIZE_T; S: string; vItem: TLVItem; begin Result := False; if not Assigned(mStrings) then Exit; vColumnCount := ListViewColumnCount(mHandle); if vColumnCount <= 0 then Exit; vItemCount := ListView_GetItemCount(mHandle); GetWindowThreadProcessId(mHandle, @vPRocessId); vProcess := OpenProcess(PROCESS_VM_OperaTION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vPRocessId); vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); mStrings.BeginUpdate; try mStrings.Clear; for I := 0 to vItemCount - 1 do begin S := ''; for J := 0 to vColumnCount - 1 do begin with vItem do begin mask := LVIF_TEXT; iItem := I; iSubItem := J; cchTextMax := SizeOf(vBuffer); pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem)); end; WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), vNumberOfBytesRead); SendMessage(mHandle, LVM_GETITEM, I, lparam(vPointer)); ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)), @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead); S := S + #9 + vBuffer; end; Delete(S, 1, 1); mStrings.Add(S); end; finally VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); CloseHandle(vProcess); mStrings.EndUpdate; end; Result := True; end; { GetListViewText } nur bei diesem Programm bekomme ich leere Items. Allerdings mit Winspy wird die VB Listview sauber ausgelesen. Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz