在控制台应用程序中,有没有办法检测StandardInput何时可用?

时间:2009-07-28 18:51:27

标签: .net powershell console

我想在某些条件下构建一个可能停止并提示输入的控制台应用程序。但我想提示只有输入可用。

有没有办法知道Stdin是否与任何东西相连?

我认为powershell是这样做的,我想做类似的事情。 Powershell会检测它何时以交互方式运行,并提示何时为真。我认为也可以强制PowerShell进入非交互模式。 (如果我错了,请纠正我)

我想我认为有几种可能性,包括但不限于:

  • 程序在cmd.exe提示符下以交互方式运行。在这种情况下,提示输入。
  • 程序在一个脚本中运行,并且某些东西已被管道传输到stdin。在这种情况下,没有提示。
  • 程序在脚本中运行,该脚本在cmd.exe提示符下运行。在这种情况下,提示。
  • 程序正在另一个程序中运行,并且没有任何东西被传送到stdin。在这种情况下,没有提示。

控制台应用程序是否可以区分这些情况并相应地修改行为?

2 个答案:

答案 0 :(得分:3)

查看GetStdHandle API。如果应用程序没有关联的stdin,则调用GetStdHandle(STD_INPUT_HANDLE)将返回NULL。

答案 1 :(得分:1)

我不确定是否检查stdin的可用性,但可能的选择是接受命令行参数(如--noprompt或其他)并在非交互式环境中执行时使用它。