zoukankan      html  css  js  c++  java
  • 为窗体程序添加控制台及重新绑定输入输出流

    在窗体未激活时,似乎标准输出的调用会无效。待究

    #include <io.h>
    #include <fcntl.h>
    #include <stdio.h>
    
    // AllocConsole();
    
    void printConsole(std::string s)
    {
        HANDLE g_Con = GetStdHandle(STD_OUTPUT_HANDLE);
        DWORD dwWritten=0;
        WriteConsoleA(g_Con,s.c_str(),s.length(),&dwWritten,NULL);
    }
    void RelocationConsole(void)
    {
        HANDLE  hStd;
        int     fd;
        FILE    *file;
    
        // 重定向标准输入流句柄到新的控制台窗口
    
        hStd = GetStdHandle(STD_INPUT_HANDLE);
        fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); // 文本模式
        file = _fdopen(fd, "r");
        setvbuf(file, NULL, _IONBF, 0); // 无缓冲
        *stdin = *file;
    
        // 重定向标准输出流句柄到新的控制台窗口
    
        hStd = GetStdHandle(STD_OUTPUT_HANDLE);
        //COORD size;
        //size.X = ConsoleWidth;
        //size.Y = ConsoleHeight;
        //SetConsoleScreenBufferSize(hStd, size);
        fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); //文本模式
        file = _fdopen(fd, "w");
        setvbuf(file, NULL, _IONBF, 0); // 无缓冲
        *stdout = *file;
    
        // 重定向标准错误流句柄到新的控制台窗口
    
        hStd = GetStdHandle(STD_ERROR_HANDLE);
        fd = _open_osfhandle(reinterpret_cast<intptr_t>(hStd), _O_TEXT); // 文本模式
        file = _fdopen(fd, "w");
        setvbuf(file, NULL, _IONBF, 0); // 无缓冲
        *stderr = *file;
    }
  • 相关阅读:
    Apache配置
    linux centos使用xrdp远程界面登陆
    实现台式机redhat6.4无线网卡上网RTL8188CUS
    linux-redhat6.4驱动无线网卡rtl8188eu
    linux开机自动连接无线网络
    javascript for循环 日期 select
    amazeui折叠面板智能化展开
    PHP Ueditor 富文本编辑器
    vue.js 使用小结
    php mysqli mysqli_query() mysqli_real_query()
  • 原文地址:https://www.cnblogs.com/mumuliang/p/3416571.html
Copyright © 2011-2022 走看看