Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - stdout unter VCL Anwendung
Knulli - Mi 09.01.13 22:04
Titel: stdout unter VCL Anwendung
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 - 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 - 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:
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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!