求WriterConsole()使用举例,在C/C++中
各位大哥,哪个有WriterConsole()的使用举例,在C/C++中。发我邮箱 xdyuchen@yahoo.cn 不胜感激!!!
[解决办法]
#include "stdafx.h"/* 处理错误信息,将错误信息格式化为系统的默认语言输出 */VOID ReportError (LPCTSTR userMessage, DWORD exitCode, BOOL printErrorMessage){ DWORD eMsglen; DWORD errNum = GetLastError(); LPTSTR lpvSysMsg; _ftprintf(stderr, _T("%s\n"), userMessage); if (printErrorMessage) { eMsglen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, errNum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpvSysMsg, 0, NULL); if (eMsglen > 0) { _ftprintf(stderr, _T("%s\n"), lpvSysMsg); }else { _ftprintf (stderr, _T("Last Error Number: %d.\n"), errNum); } if (lpvSysMsg != NULL) LocalFree(lpvSysMsg); } if (exitCode > 0) ExitProcess(exitCode); return;}/*写消息到输出句柄*/BOOL PrintStrings(HANDLE hOut, ...){ DWORD msgLen, count; LPCTSTR pMsg; va_list pMsgList; /*当前消息字符串*/ va_start (pMsgList, hOut); /*开始处理消息*/ while ((pMsg = va_arg(pMsgList, LPCTSTR)) != NULL) { msgLen = _tcslen(pMsg); /*先调用 WriteConsole() 若失败则调用 WriteFile(),两者都失败则返回 FALSE*/ if (!WriteConsole(hOut, pMsg, msgLen, &count, NULL) && !WriteFile(hOut, pMsg, msgLen * sizeof(TCHAR), &count, NULL)) { va_end(pMsgList); return FALSE; } } va_end(pMsgList); return TRUE;}/* 处理单条信息的 PrintStrings() 版本 */BOOL PrintMsg(HANDLE hOut, LPCTSTR pMsg){ return PrintStrings(hOut, pMsg, NULL);}/* 在控制台中输出提示信息,在主函数中使用输入密码提示 */BOOL ConsolePromt(LPCTSTR pPromptMsg, LPTSTR pResponse, DWORD maxChar, BOOL echo){ HANDLE hIn, hOut; DWORD charIn, echoFlag, nOut; BOOL success; /* CONIN$ 为标准输入,获得标准输入句柄 */ hIn = CreateFile(_T("CONIN$"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); /* CONOUT$ 为标准输入,获得标准输出句柄 */ hOut = CreateFile(_T("CONOUT$"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); /* 是否要让输入的内容回显,对于正式应用,输入的密码不会回显到屏幕上,如 SSH 连接 Linux 时输入密码的情况*/ echoFlag = echo ? ENABLE_ECHO_INPUT : 0; /* 确保每一个函数要执行成功,分别设置控制台输入输出模式,最后用 ReadConsole() 读取屏幕缓冲区中用户输入的内容*/ success = SetConsoleMode (hIn, ENABLE_LINE_INPUT |echoFlag | ENABLE_PROCESSED_INPUT) && SetConsoleMode (hOut, ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT) && PrintStrings (hOut, pPromptMsg, NULL) && ReadConsole (hIn, pResponse, maxChar - 2, &charIn, NULL); if (success) { pResponse[charIn - 2] = '\0'; /* 注意,这里移动到回车符处 * Windows 结尾使用 \n\r 回车换行表示起新的一行,其中 1 个元素的宽度为 2 个字节(Unicode表示)*/ if (!_tcscmp(pResponse, _T("groad.net"))) { /* 明码比较输入的密码 */ PrintStrings (hOut, _T("\n密码确认\n"), NULL); } else PrintStrings (hOut, _T("错误,请输入正确的密码!\n"), NULL); } else _ftprintf(stderr, _T("consolePrompt failure.")); CloseHandle(hIn); CloseHandle(hOut); return success;}int _tmain(int argc, _TCHAR* argv[]){ _tsetlocale(LC_CTYPE, (LPCWSTR)""); TCHAR pwdBuffer[1000]; ConsolePromt(_T("请输入你的密码: "), pwdBuffer, 1000, TRUE); return 0;}
[解决办法]
#include <tchar.h>#include <Windows.h>int _tmain(int argc, _TCHAR* argv[]){ TCHAR ch[] = L"Hello!\n"; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hStdOut == INVALID_HANDLE_VALUE) { return -1; } DWORD dwBytesWritten; WriteConsole(hStdOut, ch, (DWORD)_tcslen(tch), &dwBytesWritten, NULL); return 0;}
[解决办法]
console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\
http://download.csdn.net/detail/zhao4zhong1/3461309