AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klasse)

Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klasse)

Ein Thema von cyberia · begonnen am 1. Sep 2011 · letzter Beitrag vom 10. Apr 2012
Antwort Antwort
cyberia

Registriert seit: 31. Aug 2011
1 Beiträge
 
#1

Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klasse)

  Alt 1. Sep 2011, 08:57
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:
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);
Ich bin für jede Hilfe dankbar!

cyb
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Auslesen einer fremden ListView (Texte sind manchmal leer, je nach ListView-Klass

  Alt 10. Apr 2012, 23:25
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)?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz