AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Messages einer DLL abfangen

Ein Thema von nytaiceman · begonnen am 7. Jun 2011 · letzter Beitrag vom 10. Jun 2011
Antwort Antwort
nytaiceman

Registriert seit: 15. Dez 2005
Ort: Schweiz, Bern
58 Beiträge
 
Delphi XE3 Professional
 
#1

Messages einer DLL abfangen

  Alt 7. Jun 2011, 14:50
Hallo zusammen,

Ich benutze eine Funktion einer DLL, das funktioniert soweit einwandfrei.

Die DLL selbst gibt aber Messages als Messagebox aus. Diese Texte würde ich aber gerne weiterverwenden (z.B. in ein Logfile etc).

Ich habe versucht, mittels einer generellen Message Abfrage, an den Text zu kommen, das ist mir aber noch nicht ganz gelungen, weil ich damit nur eine Messagenummer erhalte, nicht aber den Text der angezeigt wird:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
protected
    procedure WndProc(var Message: TMessage); override;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
{$R *.dfm}
 ...

// === Receive ALL Messages send to my Form =========================
procedure TForm1.WndProc(var Message: TMessage);
begin
 WriteLog('Messaging',Message.msg); // Write Message to Logfile
end;
Wie komme ich an den eigentlichen Text der in der aufgerufenen MessageBox angezeigt wird?
Oder ist das gar kein Messageevent?

Danke bereits im voraus.
Einfach ist nur einfach, wenn Einfach auch einfach ist!
Vermeintlich einfache Workarounds führen irgendwann zu Problemen!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Messages einer DLL abfangen

  Alt 7. Jun 2011, 14:54
Wenn die DLL die MessageBox-API von Windows aufruft würde es am einfachsten gehen die API-Funktion zu hooken damit erst deine Hilfsfunktion zum loggen aufgerufen wird un dann die WinAPI-Funktion. In der JCL gibt es Klassen die das Hooking von DLL-Funktionen vereinfacht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
nytaiceman

Registriert seit: 15. Dez 2005
Ort: Schweiz, Bern
58 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Messages einer DLL abfangen

  Alt 8. Jun 2011, 23:15
Hallo Bernhard,

danke für den Tipp aber ich vermute es muss einen einfacheren Weg geben.
Mit der JclHookExcept erhalte ich ja globale Exceptions und jegliche anderen Infos.

Kann man nicht über das THandle der geladenen DLL die sichtbaren Ausgaben in Form von Messageboxen irgendwie abfangen?
Handle := LoadLibrary(PChar('example.dll')); Die Funktion in der DLL die ich aufrufe meldet über Messageboxen den jewieligen Status. Diese Boxen müssen aber danach mit einem Klick bestätigt werden, damit die Funktion weiterläuft.

Durch ein Hooking oder ähnlichem dieser Messageboxen der DLL könnte ich das umgehen.

Hat jemand eine weitere Idee?
Einfach ist nur einfach, wenn Einfach auch einfach ist!
Vermeintlich einfache Workarounds führen irgendwann zu Problemen!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Messages einer DLL abfangen

  Alt 8. Jun 2011, 23:32
Steht der Nachrichtentext eventuell in WParam oder LParam?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

AW: Messages einer DLL abfangen

  Alt 8. Jun 2011, 23:38
Zitat:
Mit der JclHookExcept erhalte ich ja globale Exceptions und jegliche anderen Infos.
Die Unit selbst sieht nicht danach aus. Keine Ahnung, ob Es da noch was anderes bei den Jedi-Sachen gibt. Recht gute Erfahrungen habe ich mit der uallCollection von brechi gemacht. Die Methode müsste HookCode in uallHook.pas sein. Beispiele gibt auch, wenn du dem Link folgst.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
nytaiceman

Registriert seit: 15. Dez 2005
Ort: Schweiz, Bern
58 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Messages einer DLL abfangen

  Alt 10. Jun 2011, 07:21
Hallo zusammen,

Ich habe nun die DLL noch etwas genauer angeschaut und durch weiteres Reverse Engineering herausgefunden, das ich VOR dem Aufruf einer Funktion aus der DLL, das Logging/Messaging initialisieren kann und direkt in eine Logdatei schreiben lassen kann (Der Speicherort und der Name der Logdatei ist aber scheinbar in der DLL fix verdrahtet).

Das ist immerhin schon nicht schlecht, jetzt muss ich halt ein Logfile parsen um an die gewünschten Informationen zu kommen.

Das Hooking hat bei mir nur für Exceptions geklappt, nicht aber für "normale" Messages, ich scheine das aber auch nicht vollständig verstanden zu haben und muss das bei Gelegenheit nochmals genauer anschauen und versuchen umzusetzen.

Ein Merci nochmals für eure Hilfe
Einfach ist nur einfach, wenn Einfach auch einfach ist!
Vermeintlich einfache Workarounds führen irgendwann zu Problemen!
  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 04:52 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