Autor Beitrag
Knulli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Mi 09.01.13 22:04 
Ich will unter Windows mit einer anderen Anwendung kommunizieren.

Bisher haben wir das über Named Pipes getan, doch nun fragt der andere, ob ich nicht auch auf stdout meinen Salm ausgeben kann.

Jemand ne Idee, wie ich in einer fensterbasierten Anwendung auf stdout was ausgeben kann?

WriteFile mit Handle 0 geht nicht. (Ungültiges Handle, 0 hatte mir GetStdHandle(STD_OUTPUT_HANDLE) zurückgegeben)

Knulli
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 09.01.13 23:05 
Du musst erst eine Konsole mit [url]AllocConsole[/url] erzeugen. ;-)
Dann kannst du einfach Writeln benutzen.

Named Pipes benutze ich für die gezielte Kommunikation aber lieber.
Knulli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Mi 20.02.13 18:23 
Wir wollten ja Daten austauschen. Mit AllocConsole erzeuge ich doch aber eine neue Konsole in der niemend zuhört. Oder?

Also habe ich AttachConsole genommen. Soweit ich das verstehe, greife ich mir damit die Console des aufrufenden Prozesses.

Damit war es mir nun möglich, wenn meine Anwendung von cmd.exe heraus aufgerufen wird, Texte dorthin auszugeben.

Soweit so gut. Nun fragt mich der andere aber, warum er meinen Salm nicht in eine Textdatei umleiten kann.

Schlimm diese Unix Freaks!!!

Mache ich was falsch oder ist seine Herangehensweise falsch?

Knulli

Hier mal etwas Text von meiner Seite, er wollte "TraffiCage.exe > output.txt" machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  ConsolePresent := AttachConsole(ATTACH_PARENT_PROCESS) AND (GetStdHandle(STD_OUTPUT_HANDLE) <> INVALID_HANDLE_VALUE);
  OutputToConsole(-1, -1, Now(), 'Startup Test', true);
...

procedure TFTraffiCage.OutputToConsole(aBoxNum, aAntenna: Integer; aDateTime: TDateTime; aAnimalTag: String; aAnimalIn: Boolean);
var
  st: String;
  iLevels: Integer;
  JSONObject: TlkJSONobject;
begin
  if not ConsolePresent then exit;

  JSONObject    := TlkJSONobject.Create;
...
  iLevels := 0;
  st := GenerateReadableText(JSONobject, iLevels);
  Writeln(StringReplace(st, cCrLf, '', [rfReplaceAll]));
  FreeAndNil(JSONobject);
end;