![]() |
Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klasse)
Hallo,
ich habe ein Problem mit dem Auslesen einer ListView die zu einer fremden Applikation gehört. Diese ListView hat die Klasse ListView20WndClass. Ich habe bereits verschiedene Coding-Snippets aus dem Netz ausprobiert und komme leider immer zum selben Ergebnis: - SysListView32 lässt sich perfekt auslesen - TListView lässt sich perfekt auslesen - Im Falle einer ListView20WndClass scheitert der Aufruf ListView_GetItem (Ergebnis wird false) Der Handle ist in jedem Fall korrekt. Bisher habe ich GrabListView sowie ein Snippet von Madshi ausprobiert. Das Coding von Madshi gefällt mir eigentlich besser (siehe unten). Der Effekt ist aber überall derselbe: ListView_GetItem liefert false zurück. Ich hatte schon vermutet dass sich die Instanz der ListView20WndClass die ich auslesen möchte aus irgendeinem Grunde gar nicht auslesen lässt aber mit Hilfe von WinSpy2008 hier aus dem Forum lässt sich der Content ohne Probleme auslesen.
Delphi-Quellcode:
Ich bin für jede Hilfe dankbar!
var ListView : hWnd;
TmpPC : PChar; PListItem : ^LV_ITEM; ListItem : LV_ITEM; CurrentPos, ItemCount : Integer; pid : dword; // process ID ph : dword; // process handle c1 : dword; // dummy variable arrCh : array [0..255] of char; begin listbox1.Clear; ListView:=Self.windowHandle; // ask the process ID of the other process GetWindowThreadProcessID(ListView, @pid); logInfo('pid',pid); // open the other process ph := OpenProcess(PROCESS_ALL_ACCESS, false, pid); // allocate memory in the other process TmpPC := VirtualAllocEx(ph, nil, 255, MEM_COMMIT, PAGE_EXECUTE_READWRITE); PListItem := VirtualAllocEx(ph, nil, sizeOf(LV_ITEM), MEM_COMMIT, PAGE_EXECUTE_READWRITE); ItemCount:=ListView_GetItemCount(ListView); logInfo('ItemCount',ItemCount); for CurrentPos:=0 to ItemCount-1 do begin ListItem.mask:=LVIF_TEXT; ListItem.iItem:=CurrentPos; ListItem.iSubItem:=0; ListItem.pszText:=TmpPC; ListItem.cchTextMax:=255; // write the prepared item to the other process WriteProcessMemory(ph, PListItem, @ListItem, sizeOf(ListItem), c1); // ask the item content if ListView_GetItem(ListView, PListItem^) then begin // read the item string back from the other process and show it ReadProcessMemory(ph, TmpPC, @arrCh, 255, c1); listBox1.Items.Add(arrCh); end; end; // free the memory of the other process VirtualFreeEx(ph, TmpPC, 0, MEM_RELEASE); VirtualFreeEx(ph, PListItem, 0, MEM_RELEASE); // close handle CloseHandle(ph); cyb |
AW: Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klass
Zu wenig Info. Fehlercodes, Fehlercodes, Fehlercodes!!!
Handelt es sich bei den Zielanwendungen um privilegierte Prozesse, bei deinem aber nicht? 32bit vs. 64bit? Filtert die Zielanwendung vielleicht sogar die Fensternachrichten von externen Quellen (geht seit Vista)? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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