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

3
我想建立一个控制台应用程序,在某些条件下停止并提示用户输入。但我只想在可以输入时提示。
是否有一种方法可以知道Stdin是否连接到任何内容?
我认为PowerShell可以做到这一点,而且我想做一些类似的事情。PowerShell检测到它被交互式运行时会提示信息。如果我错了,请指正。
我想有几种可能性,包括但不限于:
1.程序正在一个cmd.exe提示符中交互式运行。这种情况下,需要提示用户输入。 2.程序正在脚本中运行,并且stdin已经被传输。这种情况下,不需要提示。 3.程序在脚本中运行,该脚本正在cmd.exe提示符中运行。这种情况下,需要提示。 4.程序从另一个程序中运行,并且没有任何东西传输至stdin。这种情况下,不需要提示。
控制台应用程序是否能够区分这些情况并相应地修改行为?
2个回答

3

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


1

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


好主意。 我知道PowerShell v1.0有这个选项。我认为它是(-i)。 - Cheeso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接