Autor Beitrag
Stefan-M
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 21.03.03 13:13 
Hallo erstmal an alle,

so ist das, da kommt einer neu rein und hat gleich mal eine Frage. Ich würde gern aus einer Listview eines anderen Programms die selektierte Liste auslesen.
Kann mir jemand helfen? Hab in Ansätzen da schon einiges erlesen können hier, aber wirklich weitergeholfen hat mir das nicht sehr.
Die ID der Komponente hab ich.

Gruss
Stefan
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 21.03.03 13:30 
ID Komponenten? Na egal.

Du brauchst ein Handle auf den Listview, um entsprechende Nachrichten an ihn zu senden. Das Problem ist: Der Listview gehört zu den CommonControls, welche erst ab Win95 dazu kamen. Edit-Felder, Listboxen usw. gab es schon unter Win3.11. Dort liefen die Anwendungen noch nicht in streng abgtrennten Adressräumen, so das man von einer Anwendung auf den Adressraum einer anderen Anwendung zu greifen konnte. Aus kompatibilitäts Gründen hat es Microsoft es so hingebogen, dass solche Nachrichten (Nachrichten an Edits, Listboxen usw.) erkannt werden und in einen gemeinsamen Adressraum gemappt werden, dass auch unter Win32 solche Anwendungen, die so was machen, funktionieren.
Da der Listview ein "neues" Kontroll-Elemet ist, hat Mircosoft dies dort nicht implementiert. Es läuft also daraufhinaus, dass du deinen Code in den Adressraum des Prozesses mit dem Listview injezieren mußt und das geht mit einer DLL.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 21.03.03 13:53 
Oder aber mit VirtualAllocateEx speicher im andren Prozessraum reservieren in dem dann die Daten abgelegt werden und diese dann mit ReadProcessMemory auslesen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Stefan-M Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 21.03.03 14:06 
hmmm...
Das mit dem Adressraum wird schwierig, denn woher weiss ich, wo das andere Programm die Listview-daten ablegt?

Mit ID der Komponente habsch so ein wenig was gemixt, was vielleicht nicht so zusammengehört. Ich meinte eben mit ID die ID der Listview. Und weils in Delphi eine Komponente gibt, hab ich eiinfach mal dieses Wort verwendet.

Aber danke erstmal, ich probier mal rum.

Stefan
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 21.03.03 14:09 
Es gibt in Delphi eine Komponente mit dem Namen ID? :shock:
Stefan-M Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 21.03.03 14:17 
naja man könnte im weitesten sinne die indy komponenten zu den solchen zählen :o)

Aber sag mal, du meinst doch nicht jetzt wirklich, dass ich mich so mistverständlich ausdrücke.
jedes element hat doch ein handle und eine id, wobei die id immer dieselbe ist. hab ich aus deinem programm übrigens (honigumdenmundschmierenderweise).
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 21.03.03 14:21 
Stefan-M hat folgendes geschrieben:
Aber sag mal, du meinst doch nicht jetzt wirklich, dass ich mich so mistverständlich ausdrücke.

Eigentlich shcon. Sorry.
Zitat:

jedes element hat doch ein handle und eine id, wobei die id immer dieselbe ist.

Was hat die ID des Controlls mit dessen Bezeichnung zu tun?
Stefan-M Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 21.03.03 14:26 
oooch ich glaub, das ist doch jetzt egal. ich werd mich das nächste mal besser ausdrücken - versprochen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 21.03.03 15:40 
Stefan-M hat folgendes geschrieben:
hmmm...
Das mit dem Adressraum wird schwierig, denn woher weiss ich, wo das andere Programm die Listview-daten ablegt?

Ganz einfach.. die Message um die Daten zu bekommen hat einen Parameter, der einen Pointer auf einen Speicherbereich darstellt, in den die Listview die Informationen hineinschreibt. Mit VirtualAllocateEx reservierst du den Speicher und bekommst die Adresse des Speicherblocks. Diese Adresse kommt jetzt als Parameter mit der Message mit. Und dann kannst du einfach mit ReadProcessMemory die Daten auslesen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!