Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriff auf ein TImage einer externen Anwendung (https://www.delphipraxis.net/86561-zugriff-auf-ein-timage-einer-externen-anwendung.html)

KoS 7. Mär 2007 13:18

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von bitsetter
Voraussetzung ist natürlich, dass das Programm nicht zu umfangreich ist und die Lizenzvereinbarungen eingehalten werden.

Mit diesem Satz triffst du genau die Problematik! ;-)

sirius 7. Mär 2007 15:50

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von bitsetter
Hallo, wenn KoS die Applikation in der er ein Image kontrollieren möchte mal zu Testzwecken sirius zur Verfügung stellen würde, dann könntet Ihr beide sicherlich schneller zu einem Ergebnis kommen.

Das hatte ich mir auch mal gedacht.

allerdings dachte ich mir auch, wenn es möglich wäre
Zitat:

Zitat von bitsetter
Voraussetzung ist natürlich, dass das Programm nicht zu umfangreich ist und die Lizenzvereinbarungen eingehalten werden.

hätte KoS das sicherlich schon getan.


Aber mir gehen auch die Ideen aus.
@All Wie blockiert das Programm ein "readprocessmemory" an der Einsprungadresse der WndProc?

KoS 7. Mär 2007 17:45

Re: Zugriff auf ein TImage einer externen Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Wisst ihr was? HAUT MIT TOT!
Ich Intelligenzbolzen hab vergessen die dll mit rüber zu ziehen!

@sirius: Du müsstest ggf. im Source den Label-Namen auf lbl2 ändern. Dürfte aber nur Communicate betreffen, oder?

sirius 7. Mär 2007 19:31

Re: Zugriff auf ein TImage einer externen Anwendung
 
Ich werds morgen mal änderbar machen (Label).

Was du da geschickt hast ist mysterious. Also sinnvoller Code ist es nicht. Demnach ist es nicht die wirkliche Adresse. Und da sie auch mit 4 "F"s anfängt, sieht es eher nach einer relativen Adresse aus. Aber wie geht denn das bei der wndProc? Wozu soll die relativ sein und woher weis windows das und überhaupt.... Fragen über Fragen.
Also @all, was ist, wenn bei getwindowlong(handle,gwl_wndproc) eine (anscheinend) relative Adresse herauskommt ($FFFF0141); x sind irgendwelche ZahlenEdit: Man muss nur lesen!
"Retrieves the address of the window procedure, or a handle representing the address of the window procedure."
Und was mach ich jetzt mit dem Handle :gruebel:? Ich brauche doch die Adresse.

Anscheinend zeigt das MSB an, dass es ein Handle ist (in den oberen 2GB kann ja eh nicht die WndProc liegen) jetzt muss ich $FFFF0141 (oder was auch immer da rauskommt) also negieren, dass wäre dann etwa $0000FEBF = 65215. Oder es bleibt halt bei etwas in die 4Mrd.
Tja, und dann? "GetHandleInformation"? Ich such noch mal kurz ansonsten eröffne ich einen neuen Thread.


Edit zum x-ten:
Zitat:

Ich Intelligenzbolzen hab vergessen die dll mit rüber zu ziehen!
Die DLL ist nur zum disassemblen, also zur Anzeige, alles andere funktioniert trotzdem.

KoS 8. Mär 2007 10:18

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von sirius
Edit zum x-ten:
Zitat:

Ich Intelligenzbolzen hab vergessen die dll mit rüber zu ziehen!
Die DLL ist nur zum disassemblen, also zur Anzeige, alles andere funktioniert trotzdem.

Das die DLL für zum disassamblen ist, ist mir schon klar, aber ohne kann er es halt nicht und damit auch keine Ausgabe für den Memoryprozess.
War halt mein Fehler.

brechi 8. Mär 2007 19:09

Re: Zugriff auf ein TImage einer externen Anwendung
 
Ma ne Frage: Willst du das TImage Objekt haben, oder nur das Bild bekommen oder nur das Bild abändern. (Letztes geht viel einfacher)

sirius 8. Mär 2007 20:26

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von brechi
(Letztes geht viel einfacher)

:thumb: Erzähl mal! Aber nebenbei brauchen wir auch noch den Inhalt verschiedener Labels.

KoS 9. Mär 2007 11:00

Re: Zugriff auf ein TImage einer externen Anwendung
 
Es geht darum das Bild ggf. abzuändern, aber da man das eigentlich "einfach" Überzeichnen kann brauche ich gewisse Daten von den TImage-Objekten sprich ihre Position und Größe.

Aber wie sirius schon sagte, es führt kein Weg drum herum den Text der TLabel zu ermitteln, da ohne diesen Text ich auch nicht weiß was ich bei dem TImages ersetzen soll.

brechi 9. Mär 2007 11:50

Re: Zugriff auf ein TImage einer externen Anwendung
 
Also ich weiß nicht wo das Problem ist eine Dll in den Prozes zu laden und dann einfach einer Variable die Adresse der Form zuweisen.
Dann funktionieren alle Funktionen wie FindComponent usw.

Die Adresse bekommt man durch Debuggen / Disassembling raus. Oder Man schreibt sich nen Parser das die Adresse im Speicher sucht.

Ansonsten wenns ur um abändert gehen soll: Die Standart Hooks installieren wie BitBlt StretchBlt TextOut usw. dann kommt man an die Daten auch dran.

sirius 9. Mär 2007 12:08

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von Sirius
Und was mach ich jetzt mit dem Handle ? Ich brauche doch die Adresse.

Hier gehts zu dem Thema weiter.


Zitat:

Zitat von brechi
eine Dll in den Prozes zu laden und dann einfach einer Variable die Adresse der Form zuweisen.
Dann funktionieren alle Funktionen wie FindComponent usw.

Vorraussetzung ist auch hier, dass es die gleiche VCL ist. Aber das ist auch alles nicht das Problem. Ich habs nun ohne DLL und ohne VCL gemacht, klappt ja auch prima. Aber eben nicht bei diesem Programm. Weil es nämlich genau an dem "einfach die Adresse der Form zuweisen" scheitert. Bisher bin ich von der WndProc ausgegangen. Die Adresse des Formulars liegt 9 Bytes dahinter. Funktioniert, solange man eben die Adresse der WndProc hat. Eine aandere Referenz ist mir nicht eingefallen. Und das Programm kann ich leider nicht debuggen.

Zitat:

Zitat von brechi
Ansonsten wenns ur um abändert gehen soll: Die Standart Hooks installieren wie BitBlt StretchBlt TextOut usw. dann kommt man an die Daten auch dran.

Das ist mal ein neuer Weg, aber wie weis man dann, welches Textout zu welchem Label gehört.... vielleicht über die Koordinaten.. da muss man mal drüber nachdenken.


PS:
Zitat:

Zitat von brechi
Also ich weiß nicht wo das Problem ist

Klingt ein bisschen überheblich / unhöflich, oder?

brechi 9. Mär 2007 12:34

Re: Zugriff auf ein TImage einer externen Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, stimmt die VCL muss die selbe sein. Wenn man das Programm selbst hat sollte es durch debuggen kein Problem sein.

Für Delphi7 hab ich hier mal was gemacht, voller zugriff auf alle Forms (und deren Komponenten).
Bisher nur als Compilat, benutzt viele kleine Units die ich mal geschrieben habe (wenns denn geht, kann ich das zu einem Projekt mal zusammenfassen)

KoS 9. Mär 2007 14:51

Re: Zugriff auf ein TImage einer externen Anwendung
 
Hm ok das wäre auch mal ne Möglichkeit zu testen, allerdings obliegt mir nicht die Möglichkeit die Datei um die es hier geht einfach in Project1.exe umzubenennen.

@brechi: Kannst du das nicht so machen, das man einen Dateiname (ggf. mit Pfad) übergeben kann und dann diese verwendet wird?

brechi 9. Mär 2007 14:54

Re: Zugriff auf ein TImage einer externen Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die neue Exe, als Parameter muss sie die ProzessID übergeben bekommen.
Die andere dll wird noch gebraucht.

brechi 9. Mär 2007 15:08

Re: Zugriff auf ein TImage einer externen Anwendung
 
Hab gerade gesehen es geht noch um einiges einfacher.
Im ((EIP+0x18)^)^ befindet sich das Application Objekt. Da kommt man direkt an alle Forms und darüber an alle Bilder/Labels usw.

KoS 9. Mär 2007 15:19

Re: Zugriff auf ein TImage einer externen Anwendung
 
Hab das grad nochmal getestet und da passiert genau das was auch am Anfang des Threads zu diskussionen geführt hat, der Prozess wird gekillt ohne ein Wörtchen mitzuteilen.

Somit kann man das leider auch verwerfen, trozdem danke.

sirius 9. Mär 2007 15:22

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von brechi
Hab gerade gesehen es geht noch um einiges einfacher.
Im ((EIP+0x18)^)^ befindet sich das Application Objekt. Da kommt man direkt an alle Forms und darüber an alle Bilder/Labels usw.

Wie? Du nimmst als Referenz den EIP? Wann machst du denn das? :gruebel:


@KoS: Nicht so schnell verwerfen. Ich vermute wir brauchen nur den richtigen Einstieg ins Programm, egal ob wir dann mit meiner oder mit brechis Methode weiter verfahren.

brechi 9. Mär 2007 15:26

Re: Zugriff auf ein TImage einer externen Anwendung
 
? Ich sach nur man kann das machen imho mach ich das per Patternscan, womit ichdirek an die Forms drankomme. Aber man braucht ja nur das application Objekt um wirklcih ALLES machen zu können. Und das befindet sich nahe am EIP beim Aufruf von application.initialize

sirius 9. Mär 2007 15:28

Re: Zugriff auf ein TImage einer externen Anwendung
 
Ach du nimmst den EntryPoint und suchst da....

brechi 9. Mär 2007 16:13

Re: Zugriff auf ein TImage einer externen Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal die Methode über den EIP mit Source

sirius 9. Mär 2007 17:38

Re: Zugriff auf ein TImage einer externen Anwendung
 
Auch nicht schlecht. Mal sehen ob es funktioniert. Bei mir war halt (wie ich erst jetzt rausfand) dieses Problem, dass getwindowlong weine Adresse zurückgab.
Das umgehst du ja damit. Ansonsten war ich auch ganz schnell bei TForm gelandet. :mrgreen:

Edit: Interessant zu sehen, dass Delphi schon die records für die PE-Header bereithält. Die hab ich mir erst kürzlich selbst zusammengebastelt.

matashen 10. Mär 2007 21:36

Re: Zugriff auf ein TImage einer externen Anwendung
 
Wollte hier mal nachfragen ob das ganze noch weiter verfolgt wird. Ich hatte auch erst kürzlich das Problem ein Label einer fremden Anwendung auszulesen. Hatte leider keine Ahnung wie ich das anstellen soll. Wenn ich für euch irgendwas beisteuern kann, gebt bescheid.

Gruß Matthias

EDIT: *LOL* ICH HAB DEN EINTRAG NUMMER 100

sirius 12. Mär 2007 07:18

Re: Zugriff auf ein TImage einer externen Anwendung
 
Hi matashen,
ob wir hieran noch arbeiten? Ich find es war grad nur mal kurz Wochenende und schönes Wetter :bounce2: . Da hat bestimmt keiner was gemacht :zwinker:
Im Moment geht es auch erstmal darum, ob brechis Variante "die VCL zu finden" bei KoS funktioniert. Die Lösungen die brechi und ich bereits gepostet haben, passen hervorragend auf die VCL von Delphi 7 (und meine zumindest auch bei Turbo Delphi Explorer). Damit kannst du erstmal probieren. Ansonsten müsstest du selber dein Programm mal debuggen, erklären oder was auch immer.

sirius 17. Mär 2007 19:45

Re: Zugriff auf ein TImage einer externen Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, ich hab mal brechis Variante in meine eingearbeitet.

Einzutragen sind
-Window Title
-Label name (also dein lbl2)
-ClassName des Formulars (dabei reicht der Anfang: also TForm)

Dann "Communicate" drücken

Ansonsten mal schauen.

KoS 19. Mär 2007 16:33

Re: Zugriff auf ein TImage einer externen Anwendung
 
So mal wieder zum testen gekommen ...
Code:
Debug: $00000000 $0B42037E
Error: EAccessViolation @0B4203C1
Sieht nicht sonderlich vielversprechend aus, oder?

sirius 19. Mär 2007 16:55

Re: Zugriff auf ein TImage einer externen Anwendung
 
Jetzt wirds nur noch ein probieren. Erstaunlicherweise haben wir die Klasse des Formulars gefunden, kommen aber darin nicht weiter :gruebel: also irgnediwe ist das Formluar anscheind ganz komisch aufgebaut. Das müsste man debuggen.

brechi 19. Mär 2007 22:14

Re: Zugriff auf ein TImage einer externen Anwendung
 
Das Problem liegt doch viel mehr daran, dass KoS nicht die gewünschen Infos liefern kann die wir brauchen und dann noch zu selten online ist. Irgendwie hab ich das gefühl Sirus hat shcon mehr Zeit aufgebracht das Problem zu lösen, als der Threadersteller selber.

Zumindest einige Informationen könntest du uns geben. Windows Version, ist das Programm gepackt, wenn nicht mal die ersten paar Anweisungen vom EIP geben. Desweiteren mal sagen um was es sich genau für ein Programm handelt.

KoS 19. Mär 2007 22:42

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von brechi
Das Problem liegt doch viel mehr daran, dass KoS nicht die gewünschen Infos liefern kann die wir brauchen

Du sagst es wenigstens richtig, ich "kann" die Infos nicht liefern die ihr vielleicht gern haben wollt.
Zitat:

und dann noch zu selten online ist.
Wie bitte soll ich das verstehen? Nur weil ich vielleicht die letzten Beiträge nicht "sofort" beantwortet habe heißt das nicht das ich nicht online bin. Das hat einfach den Hintergrund das ich das Programm nicht auf meinem Rechner habe und somit auch keinen unmittelbaren direkten Zugriff.
Zitat:

Irgendwie hab ich das gefühl Sirus hat shcon mehr Zeit aufgebracht das Problem zu lösen, als der Threadersteller selber.
Das gefühl brauchst du nicht haben weil es Fakt ist. Wie soll ich auch an einer Lösung für das Problem suchen wenn ich nicht die Erfahrung dazu mitbringe.
Zitat:

Zumindest einige Informationen könntest du uns geben. Windows Version, ist das Programm gepackt, wenn nicht mal die ersten paar Anweisungen vom EIP geben.
Windows XP Pro (SP1). Was meinst du mit gepackt? (UPX?) Meines wissens nicht.
Zitat:

Desweiteren mal sagen um was es sich genau für ein Programm handelt.
Diese Frage hab ich bereits beantwortet damit das ich sie nicht beantworten kann/darf. Es hat jedenfalls was mit Darstellung von Bildern zu tun. Mehr oder weniger in Bezug auf einen dazugehörigen Titel.

Ich würde ja gern mehr Infos raus geben wenn ich könnte, geht aber eben leider nicht. Ich bin euch allen ja sehr dankbar das ihr bisher noch nicht aufgegeben habt. Verübeln würde ich es euch allerdings auch nicht wenn ihr keine Lust mehr habt.

brechi 19. Mär 2007 22:46

Re: Zugriff auf ein TImage einer externen Anwendung
 
Du hast ja den Sourcecode, könntest ja mal genau sagen wo z.b. der Fehler auftritt (einfach ein paar MessageBoxen einbauen)
Würd mir bei meiner Version schon einiges helfen...

KoS 19. Mär 2007 23:10

Re: Zugriff auf ein TImage einer externen Anwendung
 
Kann ich mal machen, aber das geht erst wieder am Mittwoch, vorher komm ich nicht dazu.

KoS 21. Mär 2007 16:43

Re: Zugriff auf ein TImage einer externen Anwendung
 
Also ... der erste Test mit dem neuen Prog von dir brechi verlief relativ vielversprechend.
D.h. ich bekomme sowas zurück:
Code:
Appinfo
 Application
 FormInit
  0: imgClient
...
  5: btnInfo
...
 11: lblInfo
Allerdings hier nur von dem Hauptform "FormInit". Jedoch nicht von dem Ziel-Form.

Was mit gerade noch aufgefallen ist, was euch noch helfen könnte, die Forms sind alle wie dieses Aufgebaut:
Code:
inherited FormInit: TFormInit
Also alle inherited und eigene Klasse TForm*.

brechi 21. Mär 2007 16:46

Re: Zugriff auf ein TImage einer externen Anwendung
 
Ist mein Programm gecrashed?
Mit welcher Delphi Version ist das Programm erstellt?
Wie heißt denn die Form die gesucht ist?

Btw. kannst ja den Quelltext ändern und z.b.
if (Pos('TForm',Form.ClassName) > 0) then

weglassen vill findet der dann mehr?

KoS 21. Mär 2007 17:41

Re: Zugriff auf ein TImage einer externen Anwendung
 
Zitat:

Zitat von brechi
Ist mein Programm gecrashed?

Nein! Zumindest nicht offensichtlich, d.h. wenn ich das Fenster von deinem Programm schließe dann schmiert mir der andere Prozess auch ab.
Zitat:

Zitat von brechi
Mit welcher Delphi Version ist das Programm erstellt?

Das weiß ich nicht. Ich kann nur anhand der mir vorliegenden Indizien (bereits in diesem Thread gepostet) sagen das es mit Delphi Compiliert worden ist.
Zitat:

Zitat von brechi
Wie heißt denn die Form die gesucht ist?

Btw. kannst ja den Quelltext ändern und z.b.
if (Pos('TForm',Form.ClassName) > 0) then

weglassen vill findet der dann mehr?

FormListaImg und die Klasse lautet TFormListaImg also ist es irrelevant ob man nun das Pos raus nimmt oder nicht weil es ja mit TForm beginnt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 3 von 3     123   

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