以前老是用标准的C/C++写Windows控制台程序,用的都是标准的库里面的程序,输入输出都特别受限制。感觉就像是在一个无法改变的舞台上跳舞,但是无论跳得多好,舞台始终还是老样子,没办法根据舞蹈来布置。这两天要弄个控制Console输入输出的程序,查了一下MSDN才知道怎么去更加深入地利用这个舞台。
我们大家都知道Windows API是一套用来控制Windows的各个部件的外观和行为的一套预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。
那么此时我们无非就是用几个API便可搞定:
1.WriteConsoleOutput 这个API从指定的位置开始输出字符串。需要一个Windows控制台的HANDLE,可以通过GetStdHandle(STD_OUTPUT_HANDLE);获得。这样就能够随意控制输出的格式。
2.ReadConsoleOutputCharact
3.ReadConsoleInput 这个读取输入缓冲区里面的内容使用GetStdHandle(STD_INPUT_HANDLE)获取Console的输入句柄。通过这个函数可以对输入进行更底层的控制。这个函数的好处在于,它还能获得对于这个Console的键盘和鼠标输入,也就是相当于窗口程。
4.WriteConsoleInput 这个就比较好玩了,直接写输入缓冲区。可以写入键盘、鼠标等任何Console能够接收的时间(Event)都可以写进去。里面键盘操作如果是一些可显示字符可以直接写ASCII字符,否则的话可能要用键盘扫描码(scan code)了。我查的MSDN的时候查虚拟码(Vritual Key Code)好像比较容易。这样可以用API MapVirtualKey将虚拟码转成扫描码,当然这个API也能进行逆向转换。
Windows控制台还有一些相关函数,数量不多,都可以通过相关查找找到,有了这些函数,写任何自动操作都没问题了。
Windows控制台中的函数大家只需要查找常用的相关函数,便于大家方便使用就可以了。希望本文能够对大家有所帮助。
【编辑推荐】