【问题标题】:program ask input twice and send it to console allocConsole程序询问输入两次并将其发送到控制台 allocConsole
【发布时间】:2021-04-01 14:58:49
【问题描述】:

我编写了一个 GUI 程序,它也可以在控制台中使用参数打开。 当我要求用户输入(密码)时,程序会询问两次。第一个输入被发送到控制台(显然无法识别),第二个被发送到我的程序。

if(!AttachConsole(ATTACH_PARENT_PROCESS))
      exit(EXIT_FAILURE);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin);

char var[10];
printf("before gets\n");
fgets(var,10,stdin);
printf("after gets\n");
printf("var : %s\n",var);

有没有办法使用控制台然后将其返回给 cmd.exe?

【问题讨论】:

  • 你试过CreateFileA("CONIN$", ...吗?
  • 没有。您将不得不使用 start /wait yourapp.exe 来避免与 cmd.exe 的无敌竞争。不实用,请改用 AllocConsole()。或者显而易见的方法,GUI 应用程序应该使用一个窗口来接受用户输入。

标签: c windows windows-console


【解决方案1】:

只有一种实用的方法可以使用控制台并将其返回,那就是成为一个控制台程序

devenv (Visual Studio) 巧妙地做到了这一点。正常的入口点是devenv.exe,这是预期的 GUI 程序,但如果从控制台启动,则有一个存根 devenv.com 代理 devenv 的启动。这是因为 .com.exe 之前尝试过。

可能的解决方案 1:使用 com 启动器启动 exe 启动器并等待它终止。现在ATTACH_PARENT_PROCESS 做你想做的事。

可能的解决方案 2:让 com 进程驱动带有隐藏窗口或更奇特的东西的 exe 进程。

可能的解决方案 3:将整个应用程序代码放在两个进程都加载的 dll 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多