代码之家  ›  专栏  ›  技术社区  ›  Judge Maygarden

如何制作隐藏的一次性控制台应用程序并与之通信?

  •  2
  • Judge Maygarden  · 技术社区  · 16 年前

    _popen ,只想从控制台程序的标准输出中读取一个值。执行此操作时,会短暂显示不需要的控制台窗口。

    我知道这可以通过使用CreateProcess的特定STARTUPINFO配置来避免。但是,我更愿意将修复程序放在控制台应用程序中,并且仍然使用_popen。使用windows子系统(即WinMain而不是main)创建子进程不会使控制台窗口消失。显然,操作系统分配了一个控制台,以方便通信。

    请注意,第三方DLL不稳定,但必须与专有硬件接口。因此,任何将DLL加载到GUI应用程序内存空间的方法都是不可接受的。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    1) 我支持在启动时将STARTUPINFO设置为隐藏窗口。这是Windows上的SOP,因此它比试图强制使用Unix SOP工作得更好。此外,您可能希望在单独测试时看到输出。

    编辑

    这个 link Indeera posted显示了如何执行第二个选项。

    编辑

    有许多替代者。到目前为止,最接近讨论的两种方法是命名管道,但也可以使用各种形式的IPC,包括基于套接字的IPC。

    但是,您不能在没有控制台的情况下访问stdin/stdout/stderr。您可以使用隐藏的控制台启动,但它实际上必须有一个。

    lua是否允许直接而不是通过cmd.exe运行可执行文件?

        2
  •  1
  •   Judge Maygarden    16 年前

    要在父GUI应用程序和隐藏的子控制台应用程序之间通信,请参阅以下MSDN文章:

        3
  •  0
  •   Rob K    16 年前

    我认为如果不启动控制台,就不能使用stdin/stdout。但您可以做的是,将包装器应用程序编写为不显示任何窗口的GUI应用程序(只需将main()切换为winmain()),然后使用某种类型的IPC机制,如套接字或共享内存。

    推荐文章