参考资料:http://www.cnblogs.com/linucos/archive/2012/09/10/2678972.html
下面这段代码演示GUI程序如何与它的控制台进行交互,包括向控制台输出字符和从控制台获取输入的字符。
void CreateConsole() { wchar_t szOutputTest[MAX_PATH] = L"晚春 韩愈\n草木知春不久归,\n百般红紫都芳菲。\n杨柳榆荚无才思,\n惟解漫天作雪飞。\n"; DWORD dwStringLength = wcslen(szOutputTest); DWORD dwBytesWritten = 0; DWORD dwErrorCode = 0; //STARTUPINFO si = {0}; //PROCESS_INFORMATION pi = {0}; //CreateProcess(L"c:\\windows\\system32\\cmd.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if(!AllocConsole()) { MessageBox(NULL, L"创建控制台失败!", L"", MB_OK); } HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTitle(L"Balloon Console Test"); if(hStdout == INVALID_HANDLE_VALUE) { MessageBox(NULL, L"获取标准输出控制台句柄出错!", L"", MB_OK); return; } if(!WriteConsole(hStdout, szOutputTest, dwStringLength, &dwBytesWritten, NULL)) { dwErrorCode = GetLastError(); MessageBox(NULL, L"向控制台写入数据失败!", L"", MB_OK); } } void InputTextOnConsole(HWND hWnd) { HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); if(hStdin == INVALID_HANDLE_VALUE) { MessageBox(NULL, L"获取标准输入控制台句柄出错!", L"", MB_OK); return; } //开缓存 wchar_t szBuffer[100] = {0}; //已输入数 DWORD dwCount = 0; ReadConsole(hStdin, szBuffer, 100, &dwCount, NULL); MessageBox(hWnd, szBuffer, L"", MB_OK); }
程序运行截图:
注意:File菜单下面有个叫“Input text on console”的菜单项,点击这个菜单项之后,程序开始等待用户在控制台中输入,实际上是点击这个菜单项之后调用nputTextOnConsole()函数,本质上是ReadConsole()函数挂起主程序,等待用户输入。