![]() |
Messages einer DLL abfangen
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:
Wie komme ich an den eigentlichen Text der in der aufgerufenen MessageBox angezeigt wird?
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; Oder ist das gar kein Messageevent? Danke bereits im voraus. |
AW: Messages einer DLL abfangen
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.
|
AW: Messages einer DLL abfangen
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?
Delphi-Quellcode:
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.
Handle := LoadLibrary(PChar('example.dll'));
Durch ein Hooking oder ähnlichem dieser Messageboxen der DLL könnte ich das umgehen. Hat jemand eine weitere Idee? |
AW: Messages einer DLL abfangen
Steht der Nachrichtentext eventuell in WParam oder LParam?
|
AW: Messages einer DLL abfangen
Zitat:
![]() |
AW: Messages einer DLL abfangen
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 :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz