【问题标题】:How to display cmd prompt after printing output to cmd.exe?将输出打印到 cmd.exe 后如何显示 cmd 提示符?
【发布时间】:2016-08-16 11:50:51
【问题描述】:

我有一个从cmd.exe 执行的winmain 应用程序并将输出打印到它。我使用AttachConsole(ATTACH_PARENT_PROCESS) 附加到 cmd.exe。执行应用程序并将输出打印到cmd.exe 后,不显示命令行提示,看起来应用程序仍在运行(虽然它已经关闭)。在关闭我的应用程序之前,我使用 FreeConsole() 释放控制台。

#include <iostream>
#include <fstream>
#include <windows.h>

int wWinMain
(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPWSTR lpCmdLine,
    int nCmdShow
) 
    {
    AttachConsole(ATTACH_PARENT_PROCESS);

    std::wofstream console_out("CONOUT$");
    std::wcout.rdbuf(console_out.rdbuf());

    std::wcout << L"\nSome Output" << std::endl;

    FreeConsole();

    return 0;
    }

当前结果:

我的目标:

myapp.exe 打印输出并关闭后,我应该如何让提示C:New folder&gt; 出现。

【问题讨论】:

  • 显示minimal reproducible example 肯定会有所帮助。听起来应该不会超过 3 行代码。
  • 我的错。添加代码示例。
  • 我不相信这是解决您问题的正确方法:stackoverflow.com/questions/38788851/…
  • 您能否提及解决它的其他方法,因为就我的研究(而且我确实尽了最大努力)而言,我得出的结论是,如果您想拥有,这是唯一的方法应用程序: 1. 需要提升 2. 在某些情况下需要从命令行启动并打印输出到它。 3. 其他情况需要从其他应用启动,不出现。
  • 如果我是你,我会问你的问题而不是你的解决方案。

标签: c++ windows winapi cmd


【解决方案1】:

如果问题还没有得到回答(经过这么长时间),需要通过发送(或者最好是发布)相应的 WM_KEYDOWN 来模拟控制台窗口中“Enter”键的实际按下消息到控制台窗口,即

之后 std::wcout &lt;&lt; L"\nSome Output" &lt;&lt; std::endl;

在调用之前 FreeConsole(), 插入以下内容:

HWND hWndCon_ = ::GetConsoleWindow();
 if( hWndCon_ ) {
    ::PostMessage( hWndCon_, WM_KEYDOWN, VK_RETURN, 0 );
 }

或者干脆

::PostMessage( ::GetConsoleWindow(), WM_KEYDOWN, VK_RETURN, 0 );

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多