首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求WriterConsole()使用举例,在C/C++中解决方法

2012-04-20 
求WriterConsole()使用举例,在C/C++中各位大哥,哪个有WriterConsole()的使用举例,在C/C++中。发我邮箱 xdyu

求WriterConsole()使用举例,在C/C++中
各位大哥,哪个有WriterConsole()的使用举例,在C/C++中。发我邮箱 xdyuchen@yahoo.cn 不胜感激!!!

[解决办法]

C/C++ code
#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;}
[解决办法]
C/C++ code
#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

热点排行