c++ - 如何在将输出打印到cmd.exe后显示cmd提示符?

标签 c++ windows winapi cmd

我有一个从 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;
    }

当前结果: enter image description here

我的目标:enter image description here

如何在 myapp.exe 打印其输出并关闭后出现提示 C:Newfolder>

最佳答案

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

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

在打电话之前 FreeConsole() , 插入以下内容:

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

或者简单地

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

关于c++ - 如何在将输出打印到cmd.exe后显示cmd提示符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974182/

相关文章:

c++ - 仅为应用程序禁用页面文件?

c++ - 来自纯 C++ 的 NSUserNotification

c++ - c++中堆栈分配数据的生命周期

c++ - Windows .lib 文件是否有一些等效的 GNU 二进制文件描述符 (BFD)?

java - 如何为特定目录创建监视器?

windows - Windows 应用程序如何使用多个进程?

c++ - 在 C++ 中为公共(public)类变量声明两种或多种类型

c++ - 如何声明库和应用程序之间共享的类

c++ - 无法获取进程句柄

c++ - 检查注册表项是否链接到另一个注册表项(或拷贝)