为窗体程序添加控制台及重新绑定输入输出流
2013-11-10 13:17
225 查看
在窗体未激活时,似乎标准输出的调用会无效。待究。
#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; }
相关文章推荐
- 启动控制台程序,重定向输入输出流
- MFC窗体程序中添加调试控制台
- 基础学习:控制台接收输入字符与重定向输出流实现程序日志两例子的编程
- MFC窗体程序中添加调试控制台
- 在你的MFC程序中添加这些代码,可以获得控制台的输入
- MFC窗体程序中添加调试控制台
- c# 控制台程序输入输出流重定向
- MFC窗体程序中添加调试控制台
- 调试 -- 为GUI程序添加控制台调试信息输出
- 汇编语言32位控制台读取用户输入字符程序代码分析(17)
- IIS 之 添加绑定域名 或 设置输入IP直接访问网站
- Sublime Text 3 配置java程序运行环境(可进行控制台输入)(转)
- 添加一条记录后,重新绑定Repeater,为什么还是要延迟一次显示
- 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序
- C++控制台程序字符输入总结
- 为控制台程序添加退出时处理程序
- GUI程序中添加控制台调试
- 关于控制台程序的输入输出问题
- VC6.0给控制台程序exe文件添加图标
- VC的控制台程序,如何获取输入参数和环境变量