AGB  ·  Datenschutz  ·  Impressum  







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

WMCopyData in Konsolenanwendung

Ein Thema von CocoPops · begonnen am 2. Apr 2014 · letzter Beitrag vom 2. Apr 2014
Antwort Antwort
CocoPops
(Gast)

n/a Beiträge
 
#1

WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 16:43
Gemeinde.

Ich probiere mich momentan ein wenig mit Konsolenanwendungen und WMCopyData herum.
Ich nutzte WMCopyData schon sehr sehr häufig zwischen zwei VCL-Programmen und es funktioniert super.
Aber VCL > Konsole, das will nicht so wie ich gerne hätte.

Ich gehe so vor.

Ich ändere im Konsolenprogramm den Fenstertitel:
SetConsoleTitle(PWideChar('TTestWindow'));

Dann erstelle ich mir eine kleine Klasse im Konsolenprogramm:
Delphi-Quellcode:
type
 TProcs = class
 private
  procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
 end;
Und schließlich WMCopyData:
Delphi-Quellcode:
procedure TProcs.WMCopyData(var Msg: TWMCopyData);
var
 s: string;
begin
 s := string(PChar(Msg.CopyDataStruct.lpData));

 WriteLn(s);
end;
Das Senden aus dem VCL-Programm heraus sieh so aus und das Fensterhandle der Konsole wird auch gefunden (showmessage):
Delphi-Quellcode:
var
 hExisting: THandle;
 pName: PChar;
 aCopyData: TCopyDataStruct;
begin
 hExisting := FindWindow(nil, 'TTestWindow');

 if hExisting <> 0 then
  begin
   showmessage('TTest wurde gefunden!');
   
   with aCopyData do
    begin
     pName := PWideChar('Hallo Konsole!');
     dwData := 0;
     cbData := (StrLen(pName) + 1) * SizeOf(Char);
     lpData := pName;
    end;

   SendMessage(hExisting, WM_COPYDATA, 0, LongInt(@aCopyData));
  end;
Es wird erfolgreich SendMessage ausgeführt. Aber ich schaffe es nicht ganz korrekt, diese Message in der Konsole pr WMCopyData-Prozedur aufzufangen.

WO ist der Fehler?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 16:47
Kann eine Konsolenanwendung denn überhaupt Zugriff auf das Konsolenfenster bekommen, in dem sie läuft? Es wäre vielleicht einfacher, ein MessageOnly-Fenster innerhalb der Anwendung zu erzeugen, aber das ist nur so ein spontaner Gedanke.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
CocoPops
(Gast)

n/a Beiträge
 
#3

AW: WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 16:53
Laut Microsoft bekommt man sogar das Handle eines Konsolenfensters: MSDN-Library durchsuchenSo erhalten Sie eine Konsole Fensterhandle (HWND) (http://support.microsoft.com/kb/124103/de).

Mh, wenn das also nicht das Wahre ist. Wie sendet und empfängt man sonst eine Message (string?) an ein Konsolenfenster?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 17:03
Es gibt da eine Komponente (neueste Version IIRC von sirius bearbeitet) namens TDOSCommand, damit müsste es gehen. Die Kommunikation läuft dort über Pipes.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
CocoPops
(Gast)

n/a Beiträge
 
#5

AW: WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 17:29
Sehr interessant diese Unit.

Nur folgendes Problem:
Delphi-Quellcode:
 DosCommand := TDosCommand.Create(nil);
 DosCommand.OnNewLine := DosCommandNewLine; // DosCommandNewLine
Ich habe in der Unit nicht ausfindig machen können, wie man denn die Prozedur für das OnNewLine-Event korrekt deklariert.
Ich habe Sie so deklariert:
 procedure TForm1.cmdNewLine(Sender: TObject; NewLine: string; OutputType: TOutputType); .

Aber bei oben markierter Stelle steigt der Kompiler aus. Die Typen seien nicht kompatibel.

Geändert von CocoPops ( 2. Apr 2014 um 17:33 Uhr)
  Mit Zitat antworten Zitat
CocoPops
(Gast)

n/a Beiträge
 
#6

AW: WMCopyData in Konsolenanwendung

  Alt 2. Apr 2014, 17:43
Ne also mit TDosCommand komme ich gar nicht klar.

Ich glaube das ist viel zu over-sized für mein kleines Problem. Wie sende ich den ganz einfach nur einen String von der GUI mit TDosCommand zur Konsole?
  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 08:17 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