【问题标题】:How do I write to the CommandPrompt from Windows GUI?如何从 Windows GUI 写入命令提示符?
【发布时间】:2017-10-01 22:45:26
【问题描述】:

操作环境:Windows 7、Visual Studio 2010、CLR GUI。

因此,我接到了一项不光彩的任务,即增强从命令提示符启动的 GUI 应用程序。因为它是。因为以前的实施者做出了糟糕的设计决策。无论如何,它会根据输入参数启动几个 GUI 之一。

如果(何时)用户键入了代码无法理解的内容,我希望能够打印回相同的命令提示符窗口。

这是我尝试过的(没有任何输出):

int main( array<System::String^>^ args )
{
  Application::EnableVisualStyles();
  Application::SetCompatibleTextRenderingDefault(false);

  OutputDebugString("hello");
  Trace::WriteLine("hello");
  Debug::Trace::WriteLine("hello");
  Console::WriteLine("hello");
  std::cout << "hello";
  printf("hello");
  return 0;
}

提前致谢!

更新:我不想使用AllocConsole(),因为这会打开一个新控制台,当应用程序退出时它会连同所有数据一起消失。同样,弹出消息框也不起作用。我正在寻找一种使输出持久的方法。

迄今为止,我可以从应用程序获取输出的唯一方法是通过消息框(非持久性)或打开一个在应用程序退出时消失的新控制台(通过 AllocConsole() )。而且我是在命令提示符下运行的,而不是调试器的“播放”按钮。

更新 为什么不做研究会被否决?我花了一天时间试图解决这个问题,浏览了几十篇试图找到解决方案的帖子,到目前为止,我发现其他人也在寻找相同的答案,但没有找到。 AllocConsole() 或更改项目类型始终是解决方案,但对我来说都不是解决方案。

更新 我添加了“完整代码”,即 2 个语句。这就是所有的代码。很简单。我正在跳过 GUI 的启动,因为我现在不关心它,我只是希望它打印回启动应用程序的控制台。最基本的HelloWorld。如果有我需要发布的项目设置,我不知道哪些是相关的。这是我想在 GUI 启动之前打印到控制台的地方。如果用户输入有错误,我将无法显示 GUI。

【问题讨论】:

  • 使用 Win32 的 AllocConsole 函数创建一个您的进程拥有的控制台窗口,您可以将 stdin/stdout 重定向到该窗口。
  • 我无法选择我正在使用的内容,我正在添加到其他人的代码中。我使用过 AllocConsole,但它创建了一个新控制台。如果您退出应用程序,信息就会消失。我希望它在我开始它的外壳中。这是我第一次涉足 Visual Studio 编码。我迫不及待地想回到 Linux...
  • 您应该编辑您的问题以明确您想要什么。
  • 您在创建项目时是否选择了正确的项目类型?您不应该选择“Win32 控制台应用程序”而不是托管 C++ 或 C++/CLI 吗?另请注意,要使事情持久,您需要在命令提示符下手动调用可执行文件;每次运行时单击 Visual Studio Play 按钮将始终关闭控制台窗口!
  • @PfunnyGuy 我要求更多代码的原因是其他人只是看到一个控制台应用程序(而不是您试图更改的现有代码)。请参阅我刚刚添加的答案。

标签: visual-studio visual-c++ c++-cli


【解决方案1】:

右击项目,选择属性
在 Linker -> System 下,将子系统从 Windows 更改为 Console。

Windows 子系统应用程序无法写入控制台,但通过将子系统更改为控制台(可以写入调用控制台),应用程序的 Form 部分仍然可以工作(在 Visual Studio 2010 中测试)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2013-01-20
    • 2016-05-16
    相关资源
    最近更新 更多