fbpx
维基百科

Win32控制台

Win32控制台(英語:Win32 console)是Windows API系统内运行控制台应用程序文本用户界面英语Text user interface的实现。每个Win32控制台有一个屏幕缓冲区和一个输入缓冲区,并可在視窗文本模式的屏幕下使用,使用Alt+Enter键可在两者间切换。

Windows Vista上使用Win32控制台窗口的Windows PowerShell
GNU Midnight Commander在Win32控制台中使用方框绘制字符

Win32控制台通常用于不需要显示图像但可能使用颜色的应用程序。以命令行界面工具举例:命令行解释器有Windows命令行提示符Windows PowerShell文件管理器Far Manager英语Far ManagerMidnight Commander;编辑器有MS-DOS编辑器英语MS-DOS Editor

窗口与全屏模式 编辑

Win32控制台应用程序可以在两种模式下运行。

一种模式是文字在一个視窗中,用户使用操作系统的字体光栅化。这种模式下,应用程序的人机交互接口由窗口系统控制。这类似X Window系統的应用程序,例如xterm

全屏模式下的Win32控制台使用硬件的文本模式,上传计算机字体显示卡。这类似文本系统控制台英语System console。全屏将使用Windows内置的VGA驱动程序,而不会使用任何已安装的显卡驱动程序,除非那个驱动程序为VGA兼容。[1]因此,它只支持VGA兼容的文本模式,最大字符分辨率为80英语Characters per line、28行。[2]这与其他操作系统中的兼容控制台存在差异(例如Linux控制台英语Linux console),它们可以使用不同的驱动程序显示更高的分辨率。因为已停止支持VGA模式,此模式在Windows VistaWindows Display Driver Model(WDDM)中已不再使用。[3]通过安装Windows XP的显示驱动程序可能规避此问题,[3]Windows 8及之后的版本只接受WDDM驱动程序。[4]

使用Alt+↵ Enter组合键可以在这两种模式间切换。在类Unix系统系统的文本环境中通常没有这样的功能。

细节 编辑

输入缓冲区是一个存储事件的队列,事件来自键盘鼠标等。输出缓冲区是一个存储字符以及其属性的网格矩阵。一个控制台窗口可能有多个输出缓冲区,但同一时刻只有一个能处于活动状态(即显示)。

控制台窗口可能会在桌面上显示为一个正常窗口,或在显卡驱动程序允许所选的屏幕尺寸时切换到全屏以使用真正的硬件文本模式。在后台非活动模式时显示模式会被锁定,因此闪烁不会有效。另外,不能使用下划线属性。

程序可以通过高级函数(例如ReadConsoleWriteConsole)或底层函数(例如ReadConsoleInputWriteConsoleOutput)访问Win32控制台。这些高级函数比Win32图形用户界面(GUI)受到更多限制。例如,程序不可能更改调色板,也不可能使用这些函数修改控制台使用的字体[5]

Win32控制台程序经常被误认为是MS-DOS应用程序,在Windows 9x系列上尤为常见。但是,Win32控制台应用程序只是本地Win32应用程序的一种特殊形式。32位元Windows可以通过使用NT DOS虚拟机英语Virtual DOS machine(NTVDM)在Win32控制台中运行MS-DOS程序。

早期版本的Windows中没有对控制台的原生支持,这是因为Windows 3.1及更早版本的Windows只是MS-DOS的一个图形界面,在早期Windows版本上运行的大多数文本程序实质上是在窗口中运行的MS-DOS程序。为简化将应用程序移植到Windows的任务,早期版本的Visual C++是随在常规窗口中实现基本控制台的库QuickWin英语QuickWin一起提供。面向Borland C++类似的库被称为EasyWin。

实现 编辑

Windows 9x 编辑

Windows NT相比,Windows 9x支持较差,因为它的控制台窗口运行在DOS虚拟机英语Virtual DOS machine中,并因此对Win32控制台应用程序的键盘输入是直接由运行DOS虚拟机的conagent.exe挂钩(Hook)截取。conagent.exe然后调用Vcond (一个VxD,Vcond然后必须将键盘输入传递给系统虚拟机,并最终到达Win32控制台应用程序。除了性能问题,这种实现还有一个问题,DOS虚拟机不能看到Win32控制台应用程序本应看到的本地驱动器,这可能引致混乱。

在Windows 9x上,屏幕缓冲区反映了VGA文本缓冲区英语VGA-compatible text mode的结构,每个字符用两个字节存储:字符代码一个字节,属性一个字节(字符必须在OEM字符集英语OEMCP中,属性表示高强度背景/不闪烁)。如果使用真实的VGA文本模式,操作速度将大大加快。

Windows NT和Windows CE 编辑

Windows NT家族的操作系统上是由客户端/服务器运行时子系统负责Win32控制台窗口,[6]但从Windows Vista开始,它已将大部分工作卸任至单独的可执行文件“conhost.exe”。

在Windows NT和Windows CE上,屏幕缓冲区为每个字符使用四个字节:字符代码两个字节,属性两个字节。字符使用UnicodeUCS-2)的16位子集编码。[7]为了向后兼容,控制台API有两个版本:Unicode和非Unicode。非Unicode版本API可以使用代码页切换以扩展字符显示的范围(但仅在该控制台窗口使用扩展可用代码范围的TrueType字体时)。UTF-8甚至可以“代码页65001”使用(仅显示完整Unicode的UCS-2子集[來源請求])。

参见 编辑

  • 命令行界面
  • 殼層(Shell)
  • 系统控制台英语System console
  • Linux控制台英语Linux console
  • 基于文本 (计算机)英语Text-based (computing)

注释 编辑

  1. ^ , 2012-10-16 [2012-11-14], (原始内容存档于2016-03-15) 
  2. ^ Julio Sanchez; Maria P. Canton, VGA Fundamentals, Part II: DOS Graphics, The PC Graphics Handbook (for C++ Programmers) (Book), CRC Press: 125, 2003, ISBN 0849316782 
  3. ^ 3.0 3.1 . Support. Microsoft. 2011-09-23 [2017-01-14]. (原始内容存档于2021-04-02). 
  4. ^ . Windows Dev Center - Hardware. Microsoft. 16 November 2013 [16 December 2013]. (原始内容存档于2016-03-04). XDDM and VGA drivers will not compile on Windows 8 and later versions 
  5. ^ A hack is available: SetConsolePalette (页面存档备份,存于互联网档案馆
  6. ^ . [2017-01-14]. (原始内容存档于2008-12-13). 
  7. ^ . Microsoft. 2009 [2010-01-01]. (原始内容存档于2017-07-04). 

外部链接 编辑

  • MSDN控制台API参考资料

win32控制台, 英語, win32, console, 是windows, api系统内运行控制台应用程序的文本用户界面, 英语, text, user, interface, 的实现, 每个有一个屏幕缓冲区和一个输入缓冲区, 并可在視窗或文本模式的屏幕下使用, 使用alt, enter键可在两者间切换, 在windows, vista上使用窗口的windows, powershell, midnight, commander在中使用方框绘制字符, 通常用于不需要显示图像但可能使用颜色的应用程序, 以命令行界面. Win32控制台 英語 Win32 console 是Windows API系统内运行控制台应用程序的文本用户界面 英语 Text user interface 的实现 每个Win32控制台有一个屏幕缓冲区和一个输入缓冲区 并可在視窗或文本模式的屏幕下使用 使用Alt Enter键可在两者间切换 在Windows Vista上使用Win32控制台窗口的Windows PowerShell GNU Midnight Commander在Win32控制台中使用方框绘制字符 Win32控制台通常用于不需要显示图像但可能使用颜色的应用程序 以命令行界面工具举例 命令行解释器有Windows命令行提示符 Windows PowerShell 文件管理器有Far Manager 英语 Far Manager 和Midnight Commander 编辑器有MS DOS编辑器 英语 MS DOS Editor 目录 1 窗口与全屏模式 2 细节 3 实现 3 1 Windows 9x 3 2 Windows NT和Windows CE 4 参见 5 注释 6 外部链接窗口与全屏模式 编辑Win32控制台应用程序可以在两种模式下运行 一种模式是文字在一个視窗中 用户使用操作系统的字体光栅化 这种模式下 应用程序的人机交互接口由窗口系统控制 这类似X Window系統的应用程序 例如xterm 全屏模式下的Win32控制台使用硬件的文本模式 上传计算机字体到显示卡 这类似文本系统控制台 英语 System console 全屏将使用Windows内置的VGA驱动程序 而不会使用任何已安装的显卡驱动程序 除非那个驱动程序为VGA兼容 1 因此 它只支持VGA兼容的文本模式 最大字符分辨率为80列 英语 Characters per line 28行 2 这与其他操作系统中的兼容控制台存在差异 例如Linux控制台 英语 Linux console 它们可以使用不同的驱动程序显示更高的分辨率 因为已停止支持VGA模式 此模式在Windows Vista的Windows Display Driver Model WDDM 中已不再使用 3 通过安装Windows XP的显示驱动程序可能规避此问题 3 但Windows 8及之后的版本只接受WDDM驱动程序 4 使用Alt Enter组合键可以在这两种模式间切换 在类Unix系统系统的文本环境中通常没有这样的功能 细节 编辑输入缓冲区是一个存储事件的队列 事件来自键盘 鼠标等 输出缓冲区是一个存储字符以及其属性的网格矩阵 一个控制台窗口可能有多个输出缓冲区 但同一时刻只有一个能处于活动状态 即显示 控制台窗口可能会在桌面上显示为一个正常窗口 或在显卡驱动程序允许所选的屏幕尺寸时切换到全屏以使用真正的硬件文本模式 在后台非活动模式时显示模式会被锁定 因此闪烁不会有效 另外 不能使用下划线属性 程序可以通过高级函数 例如ReadConsole和WriteConsole 或底层函数 例如ReadConsoleInput和WriteConsoleOutput 访问Win32控制台 这些高级函数比Win32图形用户界面 GUI 受到更多限制 例如 程序不可能更改调色板 也不可能使用这些函数修改控制台使用的字体 5 Win32控制台程序经常被误认为是MS DOS应用程序 在Windows 9x系列上尤为常见 但是 Win32控制台应用程序只是本地Win32应用程序的一种特殊形式 32位元Windows可以通过使用NT DOS虚拟机 英语 Virtual DOS machine NTVDM 在Win32控制台中运行MS DOS程序 早期版本的Windows中没有对控制台的原生支持 这是因为Windows 3 1及更早版本的Windows只是MS DOS的一个图形界面 在早期Windows版本上运行的大多数文本程序实质上是在窗口中运行的MS DOS程序 为简化将应用程序移植到Windows的任务 早期版本的Visual C 是随在常规窗口中实现基本控制台的库QuickWin 英语 QuickWin 一起提供 面向Borland C 类似的库被称为EasyWin 实现 编辑Windows 9x 编辑 与Windows NT相比 Windows 9x支持较差 因为它的控制台窗口运行在DOS虚拟机 英语 Virtual DOS machine 中 并因此对Win32控制台应用程序的键盘输入是直接由运行DOS虚拟机的conagent exe挂钩 Hook 截取 conagent exe然后调用Vcond 一个VxD Vcond然后必须将键盘输入传递给系统虚拟机 并最终到达Win32控制台应用程序 除了性能问题 这种实现还有一个问题 DOS虚拟机不能看到Win32控制台应用程序本应看到的本地驱动器 这可能引致混乱 在Windows 9x上 屏幕缓冲区反映了VGA文本缓冲区 英语 VGA compatible text mode 的结构 每个字符用两个字节存储 字符代码一个字节 属性一个字节 字符必须在OEM字符集 英语 OEMCP 中 属性表示高强度背景 不闪烁 如果使用真实的VGA文本模式 操作速度将大大加快 Windows NT和Windows CE 编辑 Windows NT家族的操作系统上是由客户端 服务器运行时子系统负责Win32控制台窗口 6 但从Windows Vista开始 它已将大部分工作卸任至单独的可执行文件 conhost exe 在Windows NT和Windows CE上 屏幕缓冲区为每个字符使用四个字节 字符代码两个字节 属性两个字节 字符使用Unicode UCS 2 的16位子集编码 7 为了向后兼容 控制台API有两个版本 Unicode和非Unicode 非Unicode版本API可以使用代码页切换以扩展字符显示的范围 但仅在该控制台窗口使用扩展可用代码范围的TrueType字体时 UTF 8甚至可以 代码页65001 使用 仅显示完整Unicode的UCS 2子集 來源請求 参见 编辑命令行界面 殼層 Shell 系统控制台 英语 System console Linux控制台 英语 Linux console 基于文本 计算机 英语 Text based computing 注释 编辑 VGA Compatible Video Miniport Drivers 2012 10 16 2012 11 14 原始内容存档于2016 03 15 Julio Sanchez Maria P Canton VGA Fundamentals Part II DOS Graphics The PC Graphics Handbook for C Programmers Book CRC Press 125 2003 ISBN 0849316782 3 0 3 1 Some 16 bit DOS based Programs and the Command Prompt will not run in full screen mode in Windows Vista and in Windows 7 Support Microsoft 2011 09 23 2017 01 14 原始内容存档于2021 04 02 Roadmap for Developing Drivers for the Windows 2000 Display Driver Model XDDM Windows Dev Center Hardware Microsoft 16 November 2013 16 December 2013 原始内容存档于2016 03 04 XDDM and VGA drivers will not compile on Windows 8 and later versions A hack is available SetConsolePalette 页面存档备份 存于互联网档案馆 Microsoft Security Advisory 930181 Exploit Code Published Affecting Windows Client Server Run Time Subsystem 2017 01 14 原始内容存档于2008 12 13 Console Reference Microsoft 2009 2010 01 01 原始内容存档于2017 07 04 外部链接 编辑MSDN控制台API参考资料 取自 https zh wikipedia org w index php title Win32控制台 amp oldid 75759082, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。