Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi fremde Treeview auslesen? (https://www.delphipraxis.net/44414-fremde-treeview-auslesen.html)

API 19. Apr 2005 09:45


fremde Treeview auslesen?
 
moin,

Möchte eine freme treeview auslesen. (z.B vom explorer)
Wie stelle ich das an??

toms 19. Apr 2005 10:58

Re: fremde Treeview auslesen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Anlage zum Auslesen einer TreeView und ListView unter Win9x/NT


// fuer einen TreeView


Delphi-Quellcode:
uses
  uProcessMemMgr;

function TForm1.GrabTreeView(TreeView: TTreeView; extWnd: HWND): Integer;
const
  MaxTextSize = 1024;
var
  TreeWnd: HWND;
  MM: TProcessMemMgr;
  CurrentItem: HTREEITEM;

  TVItem: TTVItem;
  PrTVItem: PTVItem;
  PrText: PChar;

  procedure AddNodes(TreeView: TTreeView; hTree: HWND; ASrc: HTREEITEM; ADst: TTreeNode);
  var
    NextDst: TTreeNode;
    NextSrc: HTREEITEM;
  begin
    if not Assigned(ASrc) then
      Exit;
    TVItem.hItem := ASrc;
    TVItem.mask := TVIF_TEXT or TVIF_IMAGE or TVIF_PARAM;
    MM.Write(TVItem, PrTVItem, SizeOf(TTVItem));
    {Get Next TreeView Item}
    TreeView_GetItem(TreeWnd, PrTVItem^);
    {Add to our TreeView }
    NextDst := TreeView.Items.AddChild(ADst, MM.ReadStr(PrText));

    {Get Next TreeView Item}
    NextSrc := TreeView_GetChild(hTree, ASrc);
    while Assigned(NextSrc) do
    begin
      AddNodes(TreeView, hTree, NextSrc, NextDst);
      NextSrc := TreeView_GetNextItem(hTree, NextSrc, TVGN_NEXT);
    end;
  end;

begin
  TreeWnd := extWnd;
  if TreeWnd = 0 then
    raise Exception.Create('Handle not found...');
  try
    MM := CreateProcessMemMgrForWnd(TreeWnd);
    PrTVItem := MM.AllocMem(SizeOf(TTVItem));
    PrText := MM.AllocMem(MaxTextSize);
    TVItem.mask := TVIF_TEXT;
    TVItem.pszText := PrText;
    TVItem.cchTextMax := MaxTextSize;
    CurrentItem := TreeView_GetRoot(TreeWnd);
    repeat
      AddNodes(TreeView, TreeWnd, CurrentItem, nil);
      CurrentItem := TreeView_GetNextItem(TreeWnd, CurrentItem, TVGN_NEXT);
    until CurrentItem = nil;
  finally
    MM.Free;
  end;
  if TreeView.Items.Count > 0 then
    TreeView.Items[0].Expand(Boolean(True));
  Result := TreeView_GetVisibleCount(extWnd);
end;

Metschu 21. Jul 2015 20:38

AW: fremde Treeview auslesen?
 
Nach 10 Jahren grabe ich den Thread mal wieder aus der Versenkung...

Gibt es noch eine Möglichkeit, bei Systemen nach WIN9x den TreeView auszulesen?
Das Tool liest bei WIN 7 keine ListView aus :(

Die Suchfunktion liefert mir leider keine Ergebnisse :(

jaenicke 21. Jul 2015 22:57

AW: fremde Treeview auslesen?
 
Das kann ich nicht nachvollziehen, bei mir funktioniert das Tool unter Windows 7 und 8.1 problemlos (kompiliert mit Delphi XE8).

Das Problem ist vermutlich eher, dass du entweder nicht F12 drückst im Zielprogramm, die Maus nicht auf der Listview hast oder dass das Zielprogramm gar keine Listview enthält. Ein beliebtes Beispiel ist dafür der Windows Explorer, der früher eine normale Listview war, heute aber nicht mehr.

Metschu 22. Jul 2015 12:18

AW: fremde Treeview auslesen?
 
Zitat:

Zitat von jaenicke (Beitrag 1309435)
Das kann ich nicht nachvollziehen, bei mir funktioniert das Tool unter Windows 7 und 8.1 problemlos (kompiliert mit Delphi XE8).

Das Problem ist vermutlich eher, dass du entweder nicht F12 drückst im Zielprogramm,...

Naja, das Programm sagt "F10" Drücken, Du "F12", aber Funktionieren tuts nach Auspobiern mit "F11"... :-D

Hätte vorher mal alle Tasten drücken sollen

Gruß

Torsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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