Кіріспе

Microsoft Windows-тағы консольдік қолданбалар үшін инфрақұрылым – Windows консолі. Windows консолінің экземплярында экрандық буфер және кіріс буфері болады. Ол консольдік бағдарламалардың терезеде немесе аппараттық мәтін режимінде (толық экранды алып отыру үшін) жұмыс істеуіне мүмкіндік береді. Пайдаланушы екі режим арасында әрекеттеу үшін пернелер комбинациясын пайдалана алады. Мәтін режимі Windows Vista және одан кейінгі нұсқаларында қолжетімсіз. Алайда, Windows 10-нан бастап, толық экрандық режим қолдауға алынды. Windows консолінің экземпляры әдетте суреттерді көрсету қажеттілігі жоқ, бірақ түс қолдануы мүмкін бағдарламалар үшін қолданылады. Мысалдарға cmd.exe, Windows PowerShell, Far Manager және Midnight Commander жатады. 2019 жылы консоль хосты Windows Terminal-мен бірге MIT лицензиясы бойынша ашық код ретінде жарияланды.

Терезе және толық экран режимдері

Windows-та консольдік қолданба екі режимде жұмыс істей алады. Бір режим мәтінді терезеге орналастырып, операциялық жүйенің қаріптерді көрсетуін пайдаланады. Бұл режимде қолданбаның пайдаланушымен өзара әрекеттесуін терезе жүйесі басқарады. Бұл xterm сияқты X терезе жүйесінің қолданбаларына ұқсас. Екіншісі – толық экран режимі. Windows XP және одан бұрынғы нұсқаларда толық экранды консоль аппараттық мәтін режимін пайдаланып, растрлық қаріпті бейне адаптерге жүктейді. Бұл мәтіндік жүйелік консольға ұқсас. Бұл ертедегі толық экран режимі тек VGA-мен үйлесімді мәтін режимдерін қолдайды, бұл оған 80 бағаннан 28 қатарға дейінгі максималды таңбалық ажыратымдылықты береді. Бұл режим Windows Vista-да ескірген. Бұл мәселені Windows XP дисплей драйверін орнату арқылы шеше алды; Windows 10 қайтадан толық экран режимін ұсынады, бірақ бұл іске асыру мәтін режиміне емес, Windows көрсету ішкі жүйесін пайдаланады. Ол экранға сыятын бағандар мен қатарлардың кез келген санын қамти алады. Қолданбаларды екі режимнің арасында ауыстыру үшін пернелер комбинациясын пайдалануға болады.

Егжей-тегжейлер

Кіріс буфері – оқиғалар сақталатын кезек (пернетақта, тышқан және т.б.). Шығыс буфері – таңбалар мен олардың атрибуттарымен бірге сақталатын тіктөртбұрышты тор. Консоль терезесінде бірнеше шығыс буфері болуы мүмкін, олардың тек біреуі ғана белгілі бір сәтте активті (яғни, дисплейде көрсетіледі). Қолданбалар Windows API арқылы Windows консолімен бағдарламалық түрде өзара әрекеттесе алады, ол жоғары деңгейлі функцияларды (мысалы, ReadConsole және WriteConsole) және төмен деңгейлі функцияларды (мысалы, ReadConsoleInput және WriteConsoleOutput) ұсынады. Пайдаланушылар түс палитрасын немесе қаріпті жүйелік немесе қолданба деңгейінде өзгерте алады. Дегенмен, әрбір консоль қолданбасы өзінің түс палитрасын немесе қаріпін динамикалық түрде өзгерте алмайды. Windows консолі қолданбалары MS-DOS қолданбаларынан ерекшеленеді, тіпті Windows-та (әсіресе Windows 9x-те) олар көрініс жағынан айырмашылығы сезілмеуі мүмкін. Windows консолі қолданбалары Windows API-ге толық қол жеткізеді және MS-DOS немесе оған үйлесімді операциялық жүйелерде жұмыс істемейді. DOS қолданбалары Windows API-ге қол жеткізе алмайды және тек Windows-тың 32 биттік нұсқаларында Virtual DOS машинасының (VDM) көмегімен ғана жұмыс істей алады.

Қолданылу

Windows 95-ке дейін консольдерге арналған түпкілікті қолдау болмаған. Windows 3.1 және одан бұрынғы нұсқалары MS-DOS үшін графикалық интерфейс болғандықтан, бұрынғы Windows нұсқаларында іске қосылған көптеген мәтіндік бағдарламалар іс жүзінде MS-DOS бағдарламалары терезе ішінде жұмыс істеген. Қосымшаларды Windows-қа көшіруді жеңілдету үшін Visual C++-тың алғашқы нұсқалары QuickWin кітапханасымен бірге келді, ол әдеттегі терезеде қарапайым консольдік мүмкіндіктерді іске асырады. Borland C++ үшін соған ұқсас кітапхана EasyWin деп аталды.

Windows 9x жүйесі

Windows 9x қолдауы Windows NT-мен салыстырғанда нашар, себебі консоль терезесі жүйелік виртуалды DOS машинасының ішінде жұмыс істейді. Сондықтан, Win32 консольдік қолданбасына пернетақтадан енгізілген мәліметтер conagent.exe арқылы бағытталуы тиіс. Бұл conagent.exe DOS машинасының ішінде орындалады және нақты DOS қолданбалары үшін де пернетақта үзілісін басып алу арқылы қолданылады. Conagent.exe Vcond (VxD) шақырады. Vcond кейін пернетақтадан алынған мәліметтерді System VM-ге, содан кейін Win32 консольдік қолданбасына жіберуі керек. Орындалу жылдамдығынан басқа, бұл жүзеге асырудың тағы бір мәселесі – DOS машинасына тікелей қосылған дискілер Win32 консольдік қолданбасына көрінбейді. Бұл жағдайды түсініксіз етеді. Windows 9x жүйесінде экран буфері VGA мәтін буферінің құрылымын қайталайды, әрбір таңба ұяшығы үшін екі байт қарастырылады: біреуі таңба коды үшін, екіншісі атрибуттар үшін (таңба OEM таңбалар жиынтығында болуы керек, ал атрибут жоғары қарқынды фонмен және жыпылықтамауы керек). Егер нақты VGA мәтін режимі қолданылса, бұл операцияны едәуір жылдамдатады.

Windows NT және Windows CE

Дәстүрлі түрде, клиент/сервер орындалу уақыты (CSRSS) Windows NT операциялық жүйелер отбасындағы консоль терезелерін басқаруға жауапты болды. Windows 7 жүйесінде CSRSS әр консоль терезесі үшін бір conhost.exe процесін іске қосып, оны басқарады. Windows 8 және одан кейінгі нұсқаларда консольдік қолданбалар өздерінің conhost.exe процестерін тікелей іске қосады. Бұл өзгеріс қауіпсіздік пен пайдалану жағдайына әсер етеді. CSRSS жоғары артықшылықты қауіпсіздік контекстінде жұмыс істейтін болса, әрбір conhost.exe консольдік қолданбамен бірдей қауіпсіздік контекстінде жұмыс істейді. Сонымен қатар, Windows 7-де бұл өзгеріс консоль терезелеріне Aero Glass тақырыбының мүмкіндіктерін беруге мүмкіндік берді. Windows NT және Windows CE жүйелерінде экран буфері әр таңба ұяшығы үшін төрт байтты пайдаланады: таңба коды үшін екі байт, атрибуттар үшін екі байт. Содан кейін таңба Unicode-тың 16 биттік кіші жиынтығында (UCS-2) кодталады. Артқа қарай үйлесімділік үшін консоль API-лері екі нұсқада бар: Unicode және Unicode емес. Unicode емес API нұсқалары көрсетілетін таңбалардың ауқымын кеңейту үшін код бетін ауыстыруды пайдалана алады (бірақ бұл тек консоль терезесінде TrueType қаріптері қолданылған жағдайда ғана мүмкін, соның арқасында кодтардың ауқымы кеңейеді). Тіпті UTF-8 "код беті 65001" ретінде қол жетімді (толық Unicode-тың UCS-2 кіші жиынтығынан ғана көрсетіледі). Windows 10 2018 жылғы қазан айындағы жаңартудан бастап Windows Console толық Unicode қолдауын алды.