是否有可能获得_raw _ / _ unprocessed_命令行?

时间:2019-04-27 22:55:44

标签: winapi command-line command-line-arguments

Windows API提供了GetCommandLine(),该命令返回用于启动进程的煮熟的命令行。

例如,如果使用以下命令启动控制台应用程序:

  

MyProg.exe> OutputHere

MyProg.exe看到的命令行将包括该部分

  

>输出此处

我想以某种方式完全按原样获得命令行。 这可能吗?如果可以,怎么办?

用C和/或纯文本(无对象)提出的建议非常感谢Delphi。欢迎使用创造性的解决方案(希望不需要环0编码。)

非常感谢您的帮助。

注意::我可以判断输入/输出等是否已重定向,但这不是我想要的。我需要原始的/未煮过的命令行。

2 个答案:

答案 0 :(得分:2)

stdin,stdout和stderr的重定向或管道是由命令解释器(通常为cmd.exe)处理的。解释器解析命令并创建必要的文件和管道,然后创建实现您的命令所需的一个或多个进程。

创建的进程不了解原始命令,它们仅获得与管道和重定向无关的那部分命令。

因此,至少在您的过程中,您无法尝试执行的操作。唯一了解原始命令的是命令解释器。

答案 1 :(得分:1)

是否可以检索包括管道命令在内的完整命令行取决于您是在命令窗口中启动程序还是使用“开始”菜单中的“运行”命令来启动程序。如果您从“开始”菜单GetCommandLine使用“运行”命令,实际上会检索包括重定向命令的完整命令行,但是重定向似乎无效,因为重定向似乎是CMD.EXE的功能。

正如其他人指出的那样,您要在这里实现什么?为什么需要捕获重定向命令?