AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TreeView einer anderen Anwendung aus modifizieren
Thema durchsuchen
Ansicht
Themen-Optionen

TreeView einer anderen Anwendung aus modifizieren

Ein Thema von golisan · begonnen am 17. Dez 2017 · letzter Beitrag vom 19. Dez 2017
Antwort Antwort
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#1

TreeView einer anderen Anwendung aus modifizieren

  Alt 17. Dez 2017, 14:54
Hallo zusammen,

mein Delphi-Programm wird von einer anderen Anwendung per DCOM aufgerufen. Zusätzlich erhalte ich ein Handle auf einen Treeview.
Diesen Treeview möchte ich nun modifizieren. Im ersten Schritt alle Knoten löschen und dann neue einfügen.
Das klappt noch nicht so ganz. Ich kann die Anzahl der Knoten ermitteln und alle Knoten löschen.
Nur das Einfügen neuer Knoten funktioniert leider nicht.
So lösche ich die Knoten
 TreeView_DeleteAllItems(wnd); und so versuche ich sie einzufügen:
Delphi-Quellcode:
var
tvi: TTVInsertStruct;

ZeroMemory(@tvi, sizeof(tvi));
tvi.hParent := nil; // root Element
tvi.hInsertAfter := TVI_SORT;
tvi.item.mask := TVIF_TEXT ;
tvi.item.pszText := PChar(feNatname);
tvi.item.cchTextMax := SizeOf(PChar(feNatname));

root := TreeView_InsertItem(wnd, tvi);
Jetzt habe ich schon einiges gelesen, dass man Controls anderer Prozesse nicht modifizieren kann.
Aber wieso würde dann das Löschen funktionieren aber nicht das Anlegen.
Danke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.226 Beiträge
 
Delphi 12 Athens
 
#2

AW: TreeView einer anderen Anwendung aus modifizieren

  Alt 17. Dez 2017, 15:28
Hier übergibst du Referenzen auf Strings/PChars, die in deinem Prozessspeicher liegen.
Beim Löschen wird das nicht gemacht.

Da diese Befehle aber in dem anderen Prozess ausgeführt werden, zeigt dort der PChar auf etwas "Anderes" und es kann nicht funktionieren, wenn du vorher nicht auch den Speicher des String/PChar in den anderen Prouessspeicher kopierst.

Bei einigen Messages, wie z.B. WM_SETTEXT/SetWindowText oder WM_COPYDATA, übernimmt Windows das Rüberkopieren des Speichers.
Andere Messages, wie z.B. TVM_INSERTITEM/TreeView_InsertItem, tun das eben nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2017 um 15:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: TreeView einer anderen Anwendung aus modifizieren

  Alt 17. Dez 2017, 16:23
Du musst dir Speicher im fremden Prozess reservieren. Dort die TreeveieItem-Struktur füllen, sie in deinen Prozess kopieren, dort modifizieren und dann wieder in den anderen Prozess zurückkopieren.

Guck dir dazu mal mein ProgrammLuckieDIPs an: http://michael-puff.de/Programmierung/Delphi/Programme/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#4

AW: TreeView einer anderen Anwendung aus modifizieren

  Alt 18. Dez 2017, 06:43
Danke für eure Hinweise.
Leider ist prozessübergreifende Speicherreservierung nicht mein tägliches Geschäft
Deshalb kenne ich mich da nicht aus. Könntet ihr bitte etwas konkreter werden?
(@Luckie: ich habe in deine Programme rein geschaut aber leider nicht verstanden)
Ich habe auch das hier gefunden:
http://www.delphipraxis.net/46524-post1.html
Aber da geht es um das Auslesen eines TreeViews und nicht um die Modifizierung eines TVs.
Aber das eine oder andere Statement werde ich wohl auch brauchen...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.173 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TreeView einer anderen Anwendung aus modifizieren

  Alt 18. Dez 2017, 07:15
Und du bist dir sicher das das andere Programma im Hintergrund nicht weitere Infos zu jedem Treeknoten hält und deine Aktionen im Endeeffekt nur eine Absturz produzieren wird.?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#6

AW: TreeView einer anderen Anwendung aus modifizieren

  Alt 18. Dez 2017, 07:19
Ja, da bin ich sicher, da ich den TreeView "auf der anderen" Seite auslese.
Es geht auch rein nur um den Text im Knoten. Keine Bilder oder versteckten Informationen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:50 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