Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Message in Konsolenanwendung empfangen (https://www.delphipraxis.net/121222-message-konsolenanwendung-empfangen.html)

Cyberstorm 24. Sep 2008 06:28


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

brechi 24. Sep 2008 06:51

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.

Cyberstorm 24. Sep 2008 07:02

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?

brechi 24. Sep 2008 08:02

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.

Luckie 24. Sep 2008 08:08

Re: Message in Konsolenanwendung empfangen
 
Wer ist eigentlich Lucky?

thkerkmann 24. Sep 2008 08:12

Re: Message in Konsolenanwendung empfangen
 
Du wirst doch jetzt keine Identitätskrise bekommen ;-)

Cyberstorm 24. Sep 2008 09:34

Re: Message in Konsolenanwendung empfangen
 
sorry.
naja IE erinnert immer so an M$ ;-).


noch eine frage:

wenn ich über diesen code sende.

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;

Cyberstorm 24. Sep 2008 15:56

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