Bagikan melalui


Mode Konsol Tingkat Tinggi

Perilaku fungsi konsol tingkat tinggi dipengaruhi oleh mode input dan output konsol. Semua mode input konsol berikut diaktifkan untuk buffer input konsol saat konsol dibuat:

  • Mode input baris
  • Mode input yang diproses
  • Mode input Echo

Kedua mode output konsol berikut diaktifkan untuk buffer layar konsol saat dibuat:

  • Mode output yang diproses
  • Membungkus pada mode output EOL

Ketiga mode input, bersama dengan mode output yang diproses, dirancang untuk bekerja sama. Yang terbaik adalah mengaktifkan atau menonaktifkan semua mode ini sebagai grup. Ketika semua diaktifkan, aplikasi dikatakan dalam mode "dimasak", yang berarti bahwa sebagian besar pemrosesan ditangani untuk aplikasi. Ketika semua dinonaktifkan, aplikasi berada dalam mode "mentah", yang berarti bahwa input tidak difilter dan pemrosesan apa pun diserahkan ke aplikasi.

Aplikasi dapat menggunakan fungsi GetConsoleMode untuk menentukan mode buffer input konsol atau buffer layar saat ini. Anda dapat mengaktifkan atau menonaktifkan salah satu mode ini dengan menggunakan nilai berikut dalam fungsi SetConsoleMode. Perhatikan bahwa mengatur mode output dari satu buffer layar tidak memengaruhi mode output buffer layar lainnya.

Jika parameter hConsoleHandle adalah handel input, mode dapat berupa satu atau beberapa nilai berikut. Saat konsol dibuat, semua mode input kecuali ENABLE_WINDOW_INPUT dan ENABLE_VIRTUAL_TERMINAL_INPUT diaktifkan secara default.

Value Makna
0x0004 ENABLE_ECHO_INPUT Karakter yang dibaca oleh fungsi ReadFile atau ReadConsole ditulis ke buffer layar aktif saat diketik ke konsol. Mode ini hanya dapat digunakan jika mode ENABLE_LINE_INPUT juga diaktifkan.
ENABLE_INSERT_MODE 0x0020 Saat diaktifkan, teks yang dimasukkan di jendela konsol akan disisipkan di lokasi kursor saat ini dan semua teks yang mengikuti lokasi tersebut tidak akan ditimpa. Saat dinonaktifkan, semua teks berikut akan ditimpa.
0x0002 ENABLE_LINE_INPUT Fungsi ReadFile atau ReadConsole hanya mengembalikan saat karakter pengembalian pengangkutan dibaca. Jika mode ini dinonaktifkan, fungsi akan kembali saat satu atau beberapa karakter tersedia.
0x0010 ENABLE_MOUSE_INPUT Jika penunjuk mouse berada di dalam batas jendela konsol dan jendela memiliki fokus keyboard, peristiwa mouse yang dihasilkan oleh gerakan mouse dan penekanan tombol ditempatkan di buffer input. Peristiwa ini dibuang oleh ReadFile atau ReadConsole, bahkan ketika mode ini diaktifkan. Fungsi ReadConsoleInput dapat digunakan untuk membaca rekaman input MOUSE_EVENT dari buffer input.
0x0001 ENABLE_PROCESSED_INPUT CTRL+C diproses oleh sistem dan tidak ditempatkan di buffer input. Jika buffer input sedang dibaca oleh ReadFile atau ReadConsole, kunci kontrol lainnya diproses oleh sistem dan tidak dikembalikan dalam buffer ReadFile atau ReadConsole. Jika mode ENABLE_LINE_INPUT juga diaktifkan, backspace, pengembalian gerbong, dan karakter umpan baris ditangani oleh sistem.
0x0040 ENABLE_QUICK_EDIT_MODE Bendera ini memungkinkan pengguna menggunakan mouse untuk memilih dan mengedit teks. Untuk mengaktifkan mode ini, gunakan ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. Untuk menonaktifkan mode ini, gunakan ENABLE_EXTENDED_FLAGS tanpa bendera ini.
0x0008 ENABLE_WINDOW_INPUT Interaksi pengguna yang mengubah ukuran buffer layar konsol dilaporkan di buffer input konsol. Informasi tentang peristiwa ini dapat dibaca dari buffer input oleh aplikasi menggunakan fungsi ReadConsoleInput, tetapi tidak oleh mereka yang menggunakan ReadFile atau ReadConsole.
0x0200 ENABLE_VIRTUAL_TERMINAL_INPUT Mengatur bendera ini mengarahkan mesin pemrosesan Terminal Virtual untuk mengonversi input pengguna yang diterima oleh jendela konsol ke dalam Urutan Terminal Virtual Konsol yang dapat diambil oleh aplikasi pendukung melalui fungsi ReadFile atau ReadConsole.

Penggunaan khas bendera ini dimaksudkan bersama dengan ENABLE_VIRTUAL_TERMINAL_PROCESSING pada handel output untuk terhubung ke aplikasi yang berkomunikasi secara eksklusif melalui urutan terminal virtual.

Jika parameter hConsoleHandle adalah handel buffer layar, mode dapat berupa satu atau beberapa nilai berikut. Saat buffer layar dibuat, kedua mode output diaktifkan secara default.

Value Makna
0x0001 ENABLE_PROCESSED_OUTPUT Karakter yang ditulis oleh fungsi WriteFile atau WriteConsole atau digaungkan oleh fungsi ReadFile atau ReadConsole diurai untuk urutan kontrol ASCII, dan tindakan yang benar dilakukan. Karakter backspace, tab, bel, pengembalian gerbong, dan umpan baris diproses. Ini harus diaktifkan saat menggunakan urutan kontrol atau ketika ENABLE_VIRTUAL_TERMINAL_PROCESSING diatur.
0x0002 ENABLE_WRAP_AT_EOL_OUTPUT Saat menulis dengan WriteFile atau WriteConsole atau menggema dengan ReadFile atau ReadConsole, kursor berpindah ke awal baris berikutnya saat mencapai akhir baris saat ini. Hal ini menyebabkan baris yang ditampilkan di jendela konsol digulir ke atas secara otomatis saat kursor melaju melampaui baris terakhir di jendela. Ini juga menyebabkan konten buffer layar konsol menggulir ke atas (.. . /membuang baris atas buffer layar konsol) ketika kursor melaju melampaui baris terakhir di buffer layar konsol. Jika mode ini dinonaktifkan, karakter terakhir dalam baris ditimpa dengan karakter berikutnya.
0x0004 ENABLE_VIRTUAL_TERMINAL_PROCESSING Saat menulis dengan WriteFile atau WriteConsole, karakter diurai untuk VT100 dan urutan karakter kontrol serupa yang mengontrol gerakan kursor, mode warna/font, dan operasi lain yang juga dapat dilakukan melalui API Konsol yang ada. Untuk informasi selengkapnya, lihat Urutan Terminal Virtual Konsol.
Pastikan ENABLE_PROCESSED_OUTPUT diatur saat menggunakan bendera ini.
0x0008 DISABLE_NEWLINE_AUTO_RETURN Saat menulis dengan WriteFile atau WriteConsole, ini menambahkan status tambahan ke pembungkusan akhir baris yang dapat menunda operasi pemindahan kursor dan gulir buffer.

Biasanya ketika ENABLE_WRAP_AT_EOL_OUTPUT diatur dan teks mencapai akhir baris, kursor akan segera berpindah ke baris berikutnya dan konten buffer akan menggulir ke atas dengan satu baris. Berbeda dengan set bendera ini, kursor tidak berpindah ke baris berikutnya, dan operasi gulir tidak dilakukan. Karakter tertulis akan dicetak dalam posisi akhir pada baris dan kursor akan tetap berada di atas karakter ini seolah-olah ENABLE_WRAP_AT_EOL_OUTPUT mati, tetapi karakter yang dapat dicetak berikutnya akan dicetak seolah-olah ENABLE_WRAP_AT_EOL_OUTPUT aktif. Tidak ada penimpaan yang akan terjadi. Secara khusus, kursor dengan cepat turun ke baris berikut, gulir dilakukan jika perlu, karakter dicetak, dan kursor melanjutkan satu posisi lagi.

Penggunaan khas bendera ini dimaksudkan bersama dengan pengaturan ENABLE_VIRTUAL_TERMINAL_PROCESSING untuk meniru emulator terminal dengan lebih baik di mana menulis karakter akhir di layar (.. . /di sudut kanan bawah) tanpa memicu gulir langsung adalah perilaku yang diinginkan.
0x0010 ENABLE_LVB_GRID_WORLDWIDE API untuk menulis atribut karakter termasuk WriteConsoleOutput dan WriteConsoleOutputAttribute memungkinkan penggunaan bendera dari atribut karakter untuk menyesuaikan warna latar depan dan latar belakang teks. Selain itu, rentang bendera DBCS ditentukan dengan awalan COMMON_LVB. Secara historis, bendera ini hanya berfungsi di halaman kode DBCS untuk bahasa Tionghoa, Jepang, dan Korea.

Dengan pengecualian bendera byte dan byte berikutnya, bendera yang tersisa yang menjelaskan gambar garis dan video terbalik (.. . /swap warna latar depan dan latar belakang) dapat berguna bagi bahasa lain untuk menekankan bagian output.

Mengatur bendera mode konsol ini akan memungkinkan atribut ini digunakan di setiap halaman kode pada setiap bahasa.

Ini secara default untuk menjaga kompatibilitas dengan aplikasi yang diketahui yang secara historis telah memanfaatkan konsol mengabaikan bendera ini pada mesin non-CJK untuk menyimpan bit di bidang ini untuk tujuan mereka sendiri atau secara tidak sengaja.

Perhatikan bahwa menggunakan mode ENABLE_VIRTUAL_TERMINAL_PROCESSING dapat mengakibatkan kisi LVB dan bendera video terbalik diatur saat bendera ini masih nonaktif jika permintaan aplikasi terlampir menggarisbawahi atau membalikkan video melalui Urutan Terminal Virtual Konsol.