gpt4 book ai didi

delphi - 在Delphi中读取程序STDIN

转载 作者:行者123 更新时间:2023-12-03 14:46:20 26 4
gpt4 key购买 nike

我有以下批处理脚本:

dir | myapp.exe

该程序有这个来源(或多或少):

procedure TForm1.FormCreate(Sender: TObject);
var buff: String;
begin
Read(buff);
Memo1.Lines.Text:=buff;
end;

备忘录中的输出是:

Volume in drive C has no label.

我尝试过:

  • 将读取的部分放入以 eof 作为条件的循环中 - 以某种方式导致无限循环
  • 编写一个循环以继续读取,直到 strlen(buff) 为 0 - 由于某种原因第二次退出
  • 每 0.5 秒读取一次内容(我正在考虑异步写入标准输入),这也失败了

顺便说一句,直接运行程序,没有标准输入数据,会导致 EInputOutput 异常(I/O 错误)代码 6。

最佳答案

GUI 应用程序不会自动分配 stdin、stdout 或 stderr。您可以执行以下操作:

procedure TForm1.FormCreate(Sender: TObject);
var
Buffer: array[0..1000] of Byte;
StdIn: TStream;
Count: Integer;
begin
StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
Count := StdIn.Read(Buffer, 1000);
StdIn.Free;
ShowMessageFmt('%d', [Count]);
end;

如果你这样做

dir *.pas | myapp.exe

您将看到一个消息框,其中的数字 > 0,如果您这样做:

myapp.exe

您将看到一个带有 0 的消息框。在这两种情况下,都会显示表单。

关于delphi - 在Delphi中读取程序STDIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com