![]() |
Message in Konsolenanwendung empfangen
hiho.
also genaugenommen handelt es sich um ein programm ohne sichtbares fenster --> (aus einer konsolenanwendung {$APPTYPE CONSOLE} entfernt). ich arbeite mit einer injizierten hoocking dll, welche TextOutW hookt. die host datei schreibt in ein memory mapped file das handle des auszulesenden device context. die gehookte funktion prüft über das mmf per WindowFromDC ob es sich um den gewünschten dc handelt und soll nun den text mittels einer IPC-variante an die host applikation senden. ich dachte dabei an messages. lange rede kurze frage: wie kann ich in einer konsolenanwendung (user) messages empfangen? hatte von lucky schon mal irgendwo nen code gefunden. da war das mit nem extra thread, der nen messageloop hatte geregelt. geht das auch ohne extra thread? hat jemand ne bessere ipc-idee? wichtig ist, dass die host app nicht ständig irgendwas prüfen muss, nix verloren geht und die sache relativ fix über die bühne geht --> ca. 500ms max. danke im vorraus konrad |
Re: Message in Konsolenanwendung empfangen
Du kannst
a) wie Lucky es gemacht hat einen MessageLoop (TraslatemEssage etc.) nachbauen so wie es in einer VCL Anwendung intern auch gemacht wird. b) Events zum verschicken verwenden (CreateEvent) und mit WaitForSingleObject auf diese warten. |
Re: Message in Konsolenanwendung empfangen
zu 1.
finde luckys code nicht mehr :-(. zu 2. dann bräuchte ich aber wieder einen extra thread im host, der die ganze zeit auf das event wartet oder? und zusätzlich müsste ich dann noch den string wieder über ein mmf austauschen oder kann ich einen string direkt über ein event mit senden? |
Re: Message in Konsolenanwendung empfangen
Aso, ne ist schon richtig. Entwweder du nimmst SendMessage oder MMF+Events. Und für beide brauchst ja eine Schleife bzw. einen extra Thread.
|
Re: Message in Konsolenanwendung empfangen
Wer ist eigentlich Lucky?
|
Re: Message in Konsolenanwendung empfangen
Du wirst doch jetzt keine Identitätskrise bekommen ;-)
|
Re: Message in Konsolenanwendung empfangen
sorry.
naja IE erinnert immer so an M$ ;-). noch eine frage: wenn ich über ![]() kann ich das empfangen dann so machen? (kommt ja TMessage und nicht TWMCopyData an?!)
Delphi-Quellcode:
procedure TWndThread.Execute;
var Msg: TMsg; begin while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; procedure TWndThread.WndProc(var Msg: TMessage); begin case Msg.Msg of WM_COPYDATA: begin EnterCriticalSection(CritSec); Chat.Add(String(PChar((msg as TWMCopyData).CopyDataStruct.lpData))); LeaveCriticalSection(CritSec); end else Msg.Result:=DefWindowProc(FWndHandle, Msg.Msg, Msg.WParam, Msg.LParam); end; end; |
Re: Message in Konsolenanwendung empfangen
ich kriegs nich hin.
mach mal nen neuen thread auf... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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