Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 15

Автор ДТонсон Π₯Π°Ρ€Ρ‚

BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD fdevMode)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Ρ‚ΠΎΠ³Π΄Π°, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ β€” TRUE, ΠΈΠ½Π°Ρ‡Π΅ β€” FALSE. 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

hConsoleHandle β€” дСскриптор Π±ΡƒΡ„Π΅Ρ€Π° Π²Π²ΠΎΠ΄Π° консоли ΠΈΠ»ΠΈ Π±ΡƒΡ„Π΅Ρ€Π° дисплСя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан с ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа GENERIC_WRITE, Π΄Π°ΠΆΠ΅ Ссли устройство ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fdevMode Π·Π°Π΄Π°Π΅Ρ‚ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ символов. Π’ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ Ρ„Π»Π°Π³ΠΎΠ² содСрТится ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊ Ρ‡Π΅ΠΌΡƒ относится Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³β€” ΠΊ Π²Π²ΠΎΠ΄Ρƒ (input) ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρƒ (output). НиТС пСрСчислСны ΠΏΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ всС ΠΎΠ½ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

β€’ ENABLE_LINE_INPUT β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чтСния (ReadConsole) происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС считывания символа Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ.

β€’ ENABLE_ECHO_INPUT β€” эхо-ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов Π½Π° экранС.

β€’ ENABLE_PROCESSED_INPUT β€” установка этого Ρ„Π»Π°Π³Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмой ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку.

β€’ ENABLE_PROCESSED_OUTPUT β€” установка этого Ρ„Π»Π°Π³Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмой ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, табуляции, ΠΏΠΎΠ΄Π°Ρ‡ΠΈ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ сигнала, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку.

β€’ ENABLE_WRAP_AT_EOL_OUTPUT β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку экрана ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π΅ символов, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΈ ΠΈΡ… эхо-ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² процСссС Π²Π²ΠΎΠ΄Π°.

Π’ случаС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetConsoleMode Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FALSE. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, для получСния Π½ΠΎΠΌΠ΅Ρ€Π° ошибки слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetLastError.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReadConsole ΠΈ WriteConsole Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ функциям ReadFile ΠΈ WriteFile. 

BOOL ReadConsole(HANDLE hConsoleInput, LPVOID lpBuffer, DWORD cchToRead, LPDWORD lpcchRead, LPVOID lpReserved)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Ρ‚ΠΎΠ³Π΄Π°, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ β€” TRUE, ΠΈΠ½Π°Ρ‡Π΅ β€” FALSE.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρƒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReadFile. ЗначСния ΠΎΠ±ΠΎΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², связанных с количСством ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΡŽ (cchToRead) ΠΈ фактичСски считанных (lpcchRead) символов, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… символов, Π° Π½Π΅ Π±Π°ΠΉΡ‚ΠΎΠ², Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° lpReserved Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ NULL. Как ΠΈ Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для собствСнных Π½ΡƒΠΆΠ΄ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ поля, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ lpReserved, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… функциях. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WriteConsole ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пояснСниях. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Read-Console ΠΈ WriteConsole, ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности управлСния Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ консоли.

Π›ΡŽΠ±ΠΎΠΌΡƒ процСссу Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° консоль. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€, консоль пСрСдаСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° стадии ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Однако Π² Ρ†Π΅Π»ΠΎΠΌ рядС Π΄Ρ€ΡƒΠ³ΠΈΡ… случаСв, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС сСрвСрных ΠΈΠ»ΠΈ GUI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ консоли, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Для этих Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ двумя простыми функциями, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². 

BOOL FreeConsole(VOID)

BOOL AllocConsole(VOID) 

Ѐункция FreeConsole ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСсс ΠΎΡ‚ Π΅Π³ΠΎ консоли, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ функция AllocConsole создаСт Π½ΠΎΠ²ΡƒΡŽ консоль, Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с дСскрипторами стандартного Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, стандартного Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ стандартного Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½ΠΎΠΌΡƒ процСссу. Если консоль Ρƒ процСсса ΡƒΠΆΠ΅ имССтся, функция AllocConsole Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, слСдуСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ FreeConsole.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

GUI-прилоТСния Windows Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ консоли ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ смогут Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями WriteConsole ΠΈΠ»ΠΈ printf для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° консоль. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ Π½Π° сторонС сСрвСра Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ консоли. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ процСсс Π±Π΅Π· консоли, рассказано Π² Π³Π»Π°Π²Π΅ 6. 

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ консольного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для установки ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора, Π° Ρ‚Π°ΠΊΠΆΠ΅ задания Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π²Π΅Ρ‚Π°) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лишь Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для создания ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² работоспособных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, поэтому ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ большС, Ρ‡Π΅ΠΌ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, для вас Π½Π΅ составит большого Ρ‚Ρ€ΡƒΠ΄Π° ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, воспользовавшись справочными ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ. 

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ОБ Windows ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° использованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² ΠΈΠ»ΠΈ консолСй Π² мСньшСй стСпСни, Ρ‡Π΅ΠΌ UNIX, ΠΈ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ воспроизводит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства UNIX, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°ΠΌΠΈ. Π’ ΠΊΠ½ΠΈΠ³Π΅ [40] ΠΎΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π² посвящСна Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ обСспСчиваСмых UNIX возмоТностСй Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° (Π³Π»Π°Π²Π° 11), Π° другая β€” псСвдотСрминалам (Π³Π»Π°Π²Π° 19).

РазумССтся, Ρ€Π°Π±ΠΎΡ‚Π° Π² Windows ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда вСдСтся с использованиСм ΠΌΠΎΡ‰Π½Ρ‹Ρ… графичСских интСрфСйсов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΌΡ‹ΡˆΡŒ ΠΈ Π²Π²ΠΎΠ΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ рассмотрСниС GUI Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, всС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ здСсь обсуТдаСм, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² GUI-прилоТСниях.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π²Ρ‹Π²ΠΎΠ΄ Π½Π° консоль сообщСний ΠΈ подсказок для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Ѐункция ConsolePrompt, входящая Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 2.1, являСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° консоль Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Π½Π΅Π³ΠΎ. Данная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° прСдусматриваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ подавлСния эхо-отобраТСния ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ консольного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ символы. Двумя Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π° Π² этом ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Print-Strings ΠΈ PrintMsg; эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ использованиС любого дСскриптора, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ совмСстно с дСскрипторами устройств стандартного Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ стандартного Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ строку, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ функция PrintStrings ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ va_start, va_arg ΠΈ va_end стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘.

ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ для использования Π² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€ΠΈ всякой ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ возмоТности. 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠšΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, находящиСся Π½Π° Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ, содСрТат ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² самой ΠΊΠ½ΠΈΠ³Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² с Ρ†Π΅Π»ΡŒΡŽ сокращСния мСста Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹, ΠΈ основноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π½Π΅ΠΉ удСляСтся использованию Windows.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вводится Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Envirmnt.h (Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А ΠΈ прСдоставлСн Π½Π° Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно со всСми ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит опрСдСлСния символичСских констант UNICODE ΠΈ _UNICODE (сами опрСдСлСния "Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹"; ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с символами стандарта Unicode, символы ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠ°ΠΊΡ€ΠΎΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… особСнности окруТСния. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, находящихся Π½Π° Web-сайтС, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ экспортированиС ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ соблюдСниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… соглашСний ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 2.1. PrintMsg: Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° консоль сообщСний ΠΈ оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ 

/* PrintMsg.с: ConsolePrompt, PrintStrings, PrintMsg */

#include "Envirmnt.h" /* Π’ этом Ρ„Π°ΠΉΠ»Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define ΠΈ #undef для UNICODE. */

#include <windows.h>

#include <stdarg.h>


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 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с дСскриптором Π±ΡƒΡ„Π΅Ρ€Π° экрана консоли. */

  if (!WriteConsole(hOut, pMsg, MsgLen, &Count, NULL)

      /* Ѐункция WriteFile вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WriteConsole. */

      && !WriteFile(hOut, pMsg, MsgLen * sizeof (TCHAR), &Count, NULL)) return FALSE;

 }

 va_end(pMsgList);

 return TRUE;

}


BOOL PrintMsg(HANDLE hOut, LPCTSTR pMsg)

/* ВСрсия PrintStrings для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ сообщСния. */

{

 return PrintStrings(hOut, pMsg, NULL);

}


BOOL ConsolePrompt(LPCTSTR pPromptMsg, LPTSTR pResponse, DWORD MaxTchar, BOOL Echo)