【问题标题】:obtain user input from CreateProcess with CREATE_NEW_CONSOLE使用 CREATE_NEW_CONSOLE 从 CreateProcess 获取用户输入
【发布时间】:2017-01-24 08:39:06
【问题描述】:

我这样做:

if (!CreateProcessA(NULL, lArgs, NULL, NULL, FALSE,
    CREATE_NEW_CONSOLE, NULL, NULL, &StartupInfo, &ProcessInfo))
{
    free(lArgs);
    return GetLastError();
}

但我不知道如何从控制台获取输入。

我有义务为它写一个文件吗?

编辑 1:没有问题,它可以工作(代码是 C 和 C++)。 这创建了一个控制台,我正在寻找的是: 我如何在这个范围内获得来自这个新控制台的用户输入? lArgs 包含我传递给这个新控制台的参数/命令行。

编辑2:(我没有任何问题。它工作正常。)子进程是一个控制台,我试图在控制台(子进程)中获取用户输入到父进程。

编辑 3:子进程只是“CREATE_NEW_CONSOLE”中的控制台。命令行通过 lArgs 提供给控制台。该命令运行一个程序,其结果显示在这个新控制台中。如果我使用 _popen(我不想)而不是 createprocess,则此显示的结果由 _popen 返回,但使用 createprocess,它似乎丢失了。

【问题讨论】:

  • C 和 C++ 是不同的语言!选择您使用的标签并删除错误的标签!
  • 不应该lArgs[0] 从那个控制台获取输入吗?
  • 哪个进程有问题?发射还是发射?
  • 我认为这个问题已经被问过了(虽然我不确定它是否得到了答案):stackoverflow.com/questions/35969730/… 编辑:您实际上会在这里找到答案:stackoverflow.com/questions/19051769/…

标签: c++ c windows console createprocess


【解决方案1】:

您可以改用 _popen。它将返回用户的命令行输入。

【讨论】:

    【解决方案2】:

    好的;看来这里的问题是您对术语感到绝望。

    CREATE_NEW_CONSOLEdoes not mean what you think it means 中的“控制台”一词。没有进程是控制台;控制台是进程拥有的东西。具体来说,控制台是命令行应用程序(包括但不限于命令解释器)用于输入和输出的基于文本的窗口。 CREATE_NEW_CONSOLE 标志告诉系统“为这个子进程创建一个新的控制台窗口,而不是使用我的”。

    显然,您要做的是启动一个新的命令解释器。您不需要 CREATE_NEW_CONSOLE 标志来执行此操作。

    (请注意,如果您实际要运行的程序是可执行文件,则根本不需要命令解释器,无论您是否希望程序具有单独的控制台。任何可执行文件,包括命令-line 可执行文件,可以独立运行,它不需要命令解释器作为父进程。一般来说,如果你想运行一个批处理文件,你会启动一个新的命令解释器作为子进程;为了论证,我假设这就是你正在做的事情。)

    此外,短语“用户输入”的意思就是——用户提供给程序的输入。在这种情况下,一个人在键盘上键入的东西。子进程,无论是命令解释器还是其他程序,都不是用户,在您的情况下,它正在生成输出而不是接受输入。因此,您想要的称为 子进程输出,或者在这种情况下,您也可以将其描述为 命令解释器输出

    所以,你想问的问题:

    我正在使用 CreateProcess 启动一个命令解释器,我希望输出到我的控制台而不是新的控制台。我该怎么做?

    答案是:这是默认行为。去掉 CREATE_NEW_CONSOLE 标志,它明确告诉 Windows 完全按照你不希望它做的事情去做,它会按照你想要的方式运行。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      相关资源
      最近更新 更多