| Autor |
Beitrag |
daPimP
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 19.04.04 20:43
Mein Prog arbeitet viel mit fremden Prozessen und deren Fenstern. (ähnlich X-Spy)
Es liest auch fleißig FAST alle Komponenten der Fenster aus.
A B E R:
Ich will ALLE!
Ließt man sein eigenes Programm aus, geht das mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| ListBox1.Items.Add(inttostr(form1.ComponentCount)); for i:=0 to form1.ComponentCount-1 do ListBox1.Items.Add(form1.Components[i].Name+ ' -object:'+TObject(form1.Components[i]).ClassName); |
 Ich sehe also auch NONVCL Kompos.
Gibt es eine Möglichkeit, diese Komponenten ( wie TTimer, TLabel, TSplitter) auch aus fremden Fenstern mit auszulesen
Als Denkanstoß erinnere ich mich an Programme wie "Form Extractor".
Die geben ja auch Teile der EXE als Quellcode zurück und stellen die Komponenten wieder her....
Moderiert von Motzi: Code- durch Delphi-Tags ersetzt
_________________ watch out ... Sy SS na pp er... coming soon
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 19.04.04 20:52
Komponenten wie TTimer, TLabel etc besitzen keine Fenster-Handles und können daher auch nicht aufgelistet werden.. der Form Extractor funktioniert einfach deshalb, weil die Delphi-Formulare (DFM-Dateien) als Resource in die Exe mit eingelinkt werden. Diese Resourcen kann man nun einfach zB mit einem Programm wie ResourceHacker auslesen und man weiß sofort wie das Formular ausschaut, welche Komponenten darauf sind etc. Das geht aber eben nur bei Programmen die mit Delphi oder dem BCB kompiliert worden sind und die die VCL benutzen...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 19.04.04 20:56
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 19.04.04 21:01
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 19.04.04 21:05
MathiasSimmack hat folgendes geschrieben:
| Zitat: | | Ist das nicht ein Widerspruch? |
Wenn ich den Taskmanager aufrufe, zeigt er mir in der Spalte
GDI Objekte : 193 an
Wenn ich mein eigenes Prog auslese, habe ich 194.
Ist also fast identisch. Ich suche also die Möglichkeit die GDI Objekte auszulesen, denn was Windows kann, muss mein Prog schon lange können!
Also MUSS ich wohl an die GDIs ran, oder?
_________________ watch out ... Sy SS na pp er... coming soon
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 19.04.04 21:37
Ich halte es wie Motzi und gehe davon aus, dass du non VCL mit non- visual verwechselt hast, denn nonVCL- Komponenten kenne ich nicht. 
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 19.04.04 21:44
Nehme alles zurück und behaupte das Gegenteil!
Haben wir die Formalien geklärt, schön!
Aber es geht ja darum, dass es möglich sein MUSS, alle Komponenten fremder Fenster auszulesen!
(Siehe Windows Taskmanager: Spalte GDI-Objekte)
Kann ja nicht sein, dass ich der einzige bin, der sich um solche (un)wichtigen Dinge den Kopf zerbricht!

_________________ watch out ... Sy SS na pp er... coming soon
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 19.04.04 21:47
| daPimP hat folgendes geschrieben: | Wenn ich den Taskmanager aufrufe, zeigt er mir in der Spalte
GDI Objekte : 193 an
Wenn ich mein eigenes Prog auslese, habe ich 194.
Ist also fast identisch. Ich suche also die Möglichkeit die GDI Objekte auszulesen, denn was Windows kann, muss mein Prog schon lange können!
Also MUSS ich wohl an die GDIs ran, oder? |
Aber eben nur FAST... die Anzahl der GDI-Objekte eines Progs bekommst du mit der API-Funktion GetGuiResources...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 19.04.04 22:25
OK!
GetGuiResources funzt und ist verarbeitet.
Das Problem bleibt: Weiß denn jemand definitiv, dass ich nicht alle Objekte fremder Fenster auslesen kann.
Das beschäftigt mich jetzt schon ein Jahr. Und sollte ein da draußen sein, mach dir die Mühe und gib mir einen Anhaltspunk wie ich an die Objektnamen rankomme.
Thx
_________________ watch out ... Sy SS na pp er... coming soon
|
|
NetFalcon
      
Beiträge: 59
Guitar Player
|
Verfasst: Mo 19.04.04 22:54
Der ResHack liest aber nicht das geöffnete FensterHandle aus...
Falscher Ansatz villeicht, ich mein du redest doch hier vom ausgeführten Fenster und deren Handle or ?
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 19.04.04 23:09
NetFalcon schrieb:
| Zitat: | | Falscher Ansatz villeicht, ich mein du redest doch hier vom ausgeführten Fenster und deren Handle or ? |
Ja ich arbeite mit Handles und an ausgeführten Fenstern.
Frage: Wie kann ich alle Komponenten (sichtbar, unsichtbar) auslesen?
Ansatz A: Ich kenne den Prozess, die geladenen Fenster, die sichtbaren Komponenten der Fenster
Lösung: Ich suche einen Befehl, der mir ähnlich wie form1.Components[i].Name den Namen jeder Komponente gibt.
Ansatz B: Ich kenne das geöffnete Fenster und seinen Prozess.
Lösung: Öffne die Exe - Datei und lese (wie ResHacker) die einzelnen Formulare aus - geladen oder nicht. Dann lass ich mir zu jedem Fenster die Komponenten anzeigen - aus dem Quellcode.
Da mir zu A nix einfällt und ich weiß, dass B funktioniert, warte ich mal auf input eurerseits.
Oder hat jemand nen C - Ansatz 
_________________ watch out ... Sy SS na pp er... coming soon
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 20.04.04 10:37
Deine Ansätze sind beide falsch und es gibt auch keinen möglichen Ansatz der für alle Programme funktioniert!
1) hat nicht jedes Objekt ein Fenster-Handle und damit kannst du diese Objekte nicht per EnumChildWindows ermitteln. Sowas wie Form1.Components[index] gibt es nicht allgemein gültig! Delphi verwendet eben das Objekt orientierte VCL-Prinzip in dem alle Objekte in einem Array des Owners gespeichert werden. Das gilt aber eben nur für Delphi
2) nicht alle IDEs verwenden dasselbe Prinzip wie Delphi mit seinen DFM-Files die als Resource miteingelinkt werden. Folglich kannst du auch nicht bei allen Programmen die verwendeten Objekte aus der Resource auslesen..!
Du wirst dich wohl oder übel mit den Möglichkeiten zufrieden geben müssen, die dir die WinAPI bietet, wenn dein Programm mit allen anderen Programmen, egal mit welche IDE erstellt und mit welchem Compiler kompiliert, funktionieren soll..!
Edit: ein vergessenes "nicht" kann einem Satz auf einmal eine ganz andere Bedeutung geben... 
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Zuletzt bearbeitet von Motzi am Di 20.04.04 23:34, insgesamt 2-mal bearbeitet
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Di 20.04.04 22:32
Titel: DAS Letzte Wort
Werde mich jetzt in ein Schneckenhaus zurückziehen und warten, bis die API oder wer auch sonst, mir eine Lösung bietet!
Denn abgeschrieben habe ich den Versuch noch nicht - nur zurückgestellt auf der todo-list!!!
05-2004 watch out for .: SysMaster :.
_________________ watch out ... Sy SS na pp er... coming soon
|
|