AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Message in Konsolenanwendung empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Message in Konsolenanwendung empfangen

Ein Thema von Cyberstorm · begonnen am 24. Sep 2008 · letzter Beitrag vom 24. Sep 2008
Antwort Antwort
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#1

Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 06:28
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
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 06:51
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.
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#3

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 07:02
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?
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#4

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 08:02
Aso, ne ist schon richtig. Entwweder du nimmst SendMessage oder MMF+Events. Und für beide brauchst ja eine Schleife bzw. einen extra Thread.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 08:08
Wer ist eigentlich Lucky?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 08:12
Du wirst doch jetzt keine Identitätskrise bekommen
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#7

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 09:34
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;
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#8

Re: Message in Konsolenanwendung empfangen

  Alt 24. Sep 2008, 15:56
ich kriegs nich hin.
mach mal nen neuen thread auf...
  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 17:26 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