AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriff auf ein TImage einer externen Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf ein TImage einer externen Anwendung

Ein Thema von KoS · begonnen am 15. Feb 2007 · letzter Beitrag vom 21. Mär 2007
Antwort Antwort
Seite 6 von 12   « Erste     456 78     Letzte »    
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#51

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 26. Feb 2007, 19:10
Ich sollte vorher auch die Änderungen abspeichern bevor ich die Zip erstelle
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#52

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 27. Feb 2007, 15:45
So, jetzt kommt noch etwas Komfort in die Sache (hoffe ich). Ich hab die Exceptionbehnadlung hinbekommen. Dadurch schmiert der fremde Prozess nicht ab, wenn ein Fehler in der Info auftritt (bei mir klappt es zumindest ).

Die Änderungen mal wieder im Text:
Delphi-Quellcode:
procedure info(...); stdcall;
//bisherige Variablen beibehalten
//neu hinzukommen:
var isexception:longbool;
    myexception:cardinal;
begin
  asm //ging leider nur in Assembler
    xor edx,edx
    mov myexception,edx
    mov isexception,edx
    push ebp
    call @@1
   @@1:
    add [esp],15
    push dword ptr fs:[edx]
    mov dword ptr fs:[edx],esp
    mov myexception,esp
    jmp @@try
   @@except:
    mov eax,esp //hier springt er hin, wenn eine Exception auftaucht
    add eax,4
    mov esp,myexception
    mov ebp,[esp+8]
    inc isexception
    xor edx,edx
    pop dword ptr fs:[edx]
    pop edx
    pop ebp
    mov eax,[eax]
    mov edx,dword ptr [eax]
    mov wparam,edx //ExcpetionCode
    mov edx,[eax+12]
    mov lparam,edx //Adresse, wo passiert
   @@try:
 end;

 if not isexception then begin
   //hier kommt alles was sonst zwischen try..except stehen würde
   //also der bisherige Inhalt der Info
   Searchtype:=TSearchType(lparam mod 65536);
   .
   .
   .
   memory^.Postmessage(memory^.backwnd,backmsg,wparam,lparam);
   
   //hier noch anfügen (um die exception Behandlung wieder zu entfernen, wenn alles klar gelaufen ist)
   asm
     xor edx,edx
     pop dword ptr fs:[edx]
     pop edx
     pop edx
  end;
  
 end else begin
   //Wenn oben irgendetwas schief läuft (z.B. EAccessViolation) dann springt er zurück in den Assemblercode ganz oben
   //und dort wird isexception auf true gesetzt, damit er nacher hier landet
   //und hier können wir jetzt exceptionbehandlung betreiben
   //in dem fall einfach ne Message schicken, dass ein fehler passiert ist
   memory^.Postmessage(memory^.backwnd,errormsg,wparam,lparam);
   //ErrorMsg muss noch als Konstante definiert werden
 end;

end;
ErrorMsg im Hauptprigramm bearbeiten:
Delphi-Quellcode:
const ErrorMsg=ImageMsg+6; //oder so ähnlich
...
type Tform1....
    ...
    procedure GetErrorMsg(var msg:TMessage);message ErrorMsg;
    ...
end;

...

procedure Tform1.getErrorMsg(var msg:TMessage);
begin
  if cardinal(msg.wparam)=EXCEPTION_ACCESS_VIOLATION then
    memo1.lines.add('Error: EAccessViolation @'+inttohex(msg.lparam,8))
  else
    memo1.lines.add('Error: '+inttohex(msg.wparam,8)+' @'+inttohex(msg.lparam,8));
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#53

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 17:31
Hallo,

also ich hab jetzt die Änderungen mal eingepflegt, aber das Form wird trozdem mit einer Zugriffsverletzung geschlossen (abgefangen durch das Hauptform). So wie es mit der letzten Version von deinem Programm auch war.

Dann hängt dein Programm ein bisschen um gibt Folgendes nach ner kleinen Weile aus:
Debug(1): FFFF015E
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#54

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 18:30
Die Exception-Bahndlung funktioniert nicht? Schade. Klappt sie mit dem Beispielprogramm?
Das wäre nämlich jetzt nicht schlecht, dann könten wir mit einer For Schleife mal etwas probieren. Ich habe nämlich, das Gefühl, dass die 9 nicht stimmt. Bzw. Ich bin mir dessen sicher, nur vielleicht haben wir Glück und es ist nur die 9.

Ich schau mir das später mal an, was du geschickt hast. Du kannst ja derweil mal mit andern Zahlen testen und dir das Ergebnis merken
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#55

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 19:38
Zitat von sirius:
Die Exception-Bahndlung funktioniert nicht? Schade. Klappt sie mit dem Beispielprogramm?
Was heißt funktioniert nicht, ursprünglich war es ja so das mir der fremde Prozess komplett abgestürzt bzw. beendet worden ist, ohne eine Meldung.
Aber das hast du ja relativ schnell gefixt und dann gab es nur noch die Zugriffsverletzung bezüglich dem Form, was dann das Hauptform des fremden Prozess angezeigt hat.
Sogesehen hat sich nichts geändert, das Zielform schließt sich also nach wie vor noch, was du glaub ich mit deiner Exception-Behandlug verhindern wolltest.

Die Frage ob es bei meinem Beispielprogramm funktioniert ist etwas schwer zu beantworten. Ich sags mal so, da ich in meinem Testprogramm ja keine Zugriffsverletzung bekomme würde ich sagen sie funktioniert. D.h ich hab ja auch vorher schon keine bekommen.

Zitat von sirius:
Das wäre nämlich jetzt nicht schlecht, dann könten wir mit einer For Schleife mal etwas probieren. Ich habe nämlich, das Gefühl, dass die 9 nicht stimmt. Bzw. Ich bin mir dessen sicher, nur vielleicht haben wir Glück und es ist nur die 9.
Ich nehme mal an du meinst diese 9?p:=pointer(getwindowlong(myhandle,gwl_wndproc)+9);
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#56

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 20:17
Ja, ich meinte diese 9

Um zu testen, ob die Exception-Behandlung beim Testprogramm funktioniert, musst du einfach nur diese Zahl auf 10 oder so ändern, damit löst du auch beim Testprogramm eine Exception aus. Wollte nur wissen, ob es an deinem Compiler liegt. Denn Pascal und ASM zu mixen bringt meistens Probleme. Da muss man sich den Compiler genau anschauen. Wenn es nämlich in deinem Testprogramm auch nicht funktioniert, dann liegts an deinem Compiler. (und ich wüsste auch schon welche Stelle, aber ich kanns nicht korrigieren). Ich könnte dir dann die fertigen EXEn schicken.
Also einfach mal mit dem Testprogramm (PImage) probieren. Einmal die 9 und einmal die 10 bei getwindowlong, bei der 9 sollte alles nornmal laufen und bei der 10 eine EAccesviolation.

Das war aber eigentlich nur mal so Beiwerk. Allerdings hätte ich mit diesem Beiwerk ein kleines Programm schreiben können, was ein bisschen automatisch probiert, wie ich die Adressrechnung gestalten sollte.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#57

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 20:18
Wow, dass ihr so viel zeit investiert, nur um ein image einer anderen anwendung auszulesen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#58

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 28. Feb 2007, 20:19
Zitat von NamenLozer:
Wow, dass ihr so viel zeit investiert, nur um ein image einer anderen anwendung auszulesen
Der olympische Gedanke zählt Soviel Zeit ist es außerdem gar nicht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#59

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 1. Mär 2007, 09:27
Evtl. funktioniert dieses Exception-handling besser (Eigentlich müsste ich da mal exakt drüber lesen, wo was nach einer Exception zu finden ist, hab aber grad nicht die Zeit).
Hier der erste Teil (am anfang von Info), der Rest bleibt gleich.
Delphi-Quellcode:
asm
    xor edx,edx
    mov isexception,edx
    push ebp
    call @@1
   @@1:
    add [esp],12
    push dword ptr fs:[edx]
    mov dword ptr fs:[edx],esp
    jmp @@try
   @@except:
    mov eax,esp
    add eax,4
    mov esp,[esp+8]
    mov ebp,[esp+8]
    inc isexception
    xor edx,edx
    pop dword ptr fs:[edx]
    pop edx
    pop ebp
    mov eax,[eax]
    mov edx,dword ptr [eax]
    mov wparam,edx
    mov edx,[eax+12]
    mov lparam,edx
   @@try:
 end;
Jetzt brauchst du zumindest die unsicher Variable "myexception" nicht mehr
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#60

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 1. Mär 2007, 11:14
Mir fällt grad auf du hattest das mit der +9 ja noch geändert: p:=pointer(cardinal(memory^.oldwindowproc)+9); D.h. das mit dem getlongwindow machst du ja an einer anderen Stelle. Ich hatte das glaub ich aus dem Forum korpiert und nicht mehr darauf geachtet was du in dem Code hattest.

Zitat von sirius:
Ich könnte dir dann die fertigen EXEn schicken.
Das könntest du mal tun, damit ich seh wie es "eigentlich" funktionieren soll, oder ob es das selbe macht wie meins.

Zitat von sirius:
Also einfach mal mit dem Testprogramm (PImage) probieren. Einmal die 9 und einmal die 10 bei getwindowlong, bei der 9 sollte alles nornmal laufen und bei der 10 eine EAccesviolation.
So... jetzt könnt ich mir erstmal in den A.... beißen! Hab das grad mal versucht, beim ersten mal mit der 9 lief alles glatt, dann bei der 10 gabs die Zugriffsverletzungs-Meldung im Testprogramm.

Und nun der Hammer! Ich hab mal die dcu gelöscht (was ich bisher leider nicht gemacht hab) und nun bekomm ich auch Zugriffsverletzungen bei der 9 und das Suchprogramm hängt sich auf! Und jetzt soll man noch den Fehler finden? Ich wette der Fehler wäre schon viel früher gekommen hätte ich mal ordentlich wie es sich gehört die dcu gelöscht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 12   « Erste     456 78     Letzte »    


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 12:09 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