【问题标题】:output to command line from windows gui program从 Windows gui 程序输出到命令行
【发布时间】:2013-06-14 14:52:32
【问题描述】:

我有一个基于 GDI 的基于 win32 gui 的 exe -

程序在启动时接受命令行参数,并且 如果命令行不正确,我需要一种打印消息的方法。

目前,我正在使用 MessageBox 显示错误消息, 并且想知道如果 用户从 dos 命令行启动程序。 -

:)

好的,这是我想要的,但它需要我按enter 否则我看不到当前路径显示..

         void RedirectIOToConsole()
         {
         int hConHandle;
         FILE *fp;
         AttachConsole(-1);
         hConHandle=_open_osfhandle(GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT);
         fp=_fdopen(hConHandle,"w");
         fprintf(fp,"\ntesting\n");
         fflush(fp);
         _close(hConHandle);
         FreeConsole();
         }

【问题讨论】:

  • AttachConsole()。这在实践中效果很差,程序的输出将与命令解释器的输出混合在一起。
  • 如何在这篇文章中添加一些代码? - 我是否坚持这个 cmets 部分?
  • 您问了 44 个问题,但仍未找到“编辑”按钮?点击编辑。
  • 您看不到当前路径,因为它已经显示出来了。当您从提示符启动 GUI 程序时,它不会等待程序完成,而是立即返回到提示符。没有办法改变这种行为。

标签: c windows cmd


【解决方案1】:

大多数需要完成此操作的应用程序将创建其应用程序的 *.com 版本(将与 .exe 一起放置)。所有快捷方式都指向 .exe,但如果用户碰巧在命令行上键入名称,则最终会执行 .com 版本(因为 CMD 将在 .exe 文件之前搜索 .com 文件) .com 版本通常是一个瘦包装器,它会调用 .exe 并等待它完成或使用共享的 .dll 文件,但它的存在纯粹是为了将输出集中到正确的控制台窗口,并且在应用程序之前不会“释放”它完成。

例如,微软的 Visual Studio 使用了这种方法:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE>dir devenv.*
 Volume in drive C has no label.
 Volume Serial Number is A482-59BA

 Directory of C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE

07/26/2012  05:05 PM             7,680 devenv.com
07/26/2012  07:08 PM           406,976 devenv.exe

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 2011-02-02
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2019-11-09
    相关资源
    最近更新 更多