您的位置:首页 > 其它

MFC应用程序使用控制台的方法

2009-05-10 14:50 316 查看
CreateFile函数除了可以新建和打开文件外,还可以建立Win32环境下的控制台缓冲。此时CreateFile函数的返回值是控制台缓冲的句柄。
HANDLE console_write=CreateFile("CONOUT$",//系统控制台缓冲文件
GENERIC_READ|GENERIC_WRITE,//要读/写控制台缓冲文件,必须以读/写方式打开
FILE_SHARE_READ|FILE_SHARE_WRITE,//如果多个线程要共享这个输出控制台,就要设置共享标志
NULL,//文件安全属性,这里为NULL
OPEN_EXISTING,//无论是输出控制台还是输入控制台,都要使用OPEN_EXISTING标志
NULL,//被忽略的参数
NULL);//被忽略的参数


至此得到了一个可用的输出控制台,可以用类似的方法得到一个输入控制台:

HANDLE console_read=CreateFile("CONIN$",//注意输入控制台的缓冲文件变成了"CONIN$"
GENERIC_READ|GENERIC_WRITE,//以下同输出控制台
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL);


如果已经在程序的其他地方打开过控制台,可以用GetStdHandle()函数快速获得控制台句柄。GetStdHandle函数的唯一参数是一个DWORD标志,可能的取值有

STD_OUTPUT_HANDLE//获取输出控制台句柄
STD_INPUT_HANDLE//获取输入控制台句柄
STD_ERROR_HANDLE//获取错误输出控制台句柄

至此,就可以使用类似于读写磁盘文件的方法是用输入/输出控制台了。可以使用Write/ReadFile函数,更好的做法是使用Write/ReadConsole函数。微软给定解释是“Write/ReadFile”函数不支持Unicode。

char * buffer={"Hello Console World!/n"};
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),//获得输出控制台句柄
buffer,//要输出内容的缓存
strlen(buffer),//缓存长度
NULL,NULL
);


MFC里还是不能使用cout和printf函数的,也就是说输出数据的格式化不那么方便。解决办法只能是使用CString的Format函数然后再GetBuffer。同样,输入的时候只能从输入缓冲里接收字符串,需要自己分离里面的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: