Bagikan melalui


Buffer Input Konsol

Setiap konsol memiliki buffer input yang berisi antrean rekaman peristiwa input. Saat jendela konsol memiliki fokus keyboard, konsol memformat setiap peristiwa input (seperti penekanan tombol tunggal, gerakan mouse, atau klik tombol mouse) sebagai rekaman input yang ditempatnya di buffer input konsol.

Aplikasi dapat mengakses buffer input konsol secara tidak langsung dengan menggunakan fungsi I/O konsol tingkat tinggi, atau secara langsung dengan menggunakan fungsi input konsol tingkat rendah. Fungsi input tingkat tinggi memfilter dan memproses data dalam buffer input, hanya mengembalikan aliran karakter input. Fungsi input tingkat rendah memungkinkan aplikasi membaca rekaman input langsung dari buffer input konsol, atau menempatkan rekaman input ke dalam buffer input. Untuk membuka handel ke buffer input konsol, tentukan nilai CONIN$ dalam panggilan ke fungsi CreateFile .

Rekaman input adalah struktur yang berisi informasi tentang jenis peristiwa yang terjadi (keyboard, mouse, pengubahan ukuran jendela, fokus, atau peristiwa menu) serta detail spesifik tentang peristiwa tersebut. Anggota EventType dalam struktur INPUT_RECORD menunjukkan jenis peristiwa mana yang terkandung dalam rekaman.

Peristiwa fokus dan menu ditempatkan di buffer input konsol untuk penggunaan internal oleh sistem dan harus diabaikan oleh aplikasi.

Peristiwa Keyboard

Peristiwa keyboard dihasilkan ketika tombol apa pun ditekan atau dilepaskan; ini termasuk kunci kontrol. Namun, kunci ALT memiliki arti khusus untuk sistem ketika ditekan dan dirilis tanpa dikombinasikan dengan karakter lain, dan tidak diteruskan ke aplikasi. Selain itu, kombinasi tombol CTRL+C tidak diteruskan jika handel input dalam mode diproses.

Jika peristiwa input adalah penekanan kunci, anggota Peristiwa di INPUT_RECORD adalah struktur KEY_EVENT_RECORD yang berisi informasi berikut:

  • Nilai Boolean yang menunjukkan apakah tombol ditekan atau dirilis.
  • Jumlah pengulangan yang bisa lebih besar dari satu saat kunci ditahan.
  • Kode kunci virtual, mengidentifikasi kunci yang diberikan dengan cara yang independen perangkat.
  • Kode pemindaian virtual, menunjukkan nilai yang bergantung pada perangkat yang dihasilkan oleh perangkat keras keyboard.
  • Karakter Unicode™ atau ANSI yang diterjemahkan.
  • Variabel bendera yang menunjukkan status tombol kontrol (tombol ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, dan CAPS LOCK) dan menunjukkan apakah tombol yang ditingkatkan ditekan. Tombol yang disempurnakan untuk keyboard kunci IBM® 101 dan 102 tombol adalah tombol INS, DEL, HOME, END, PAGE UP, PAGE DOWN, dan panah di kluster di sebelah kiri keypad numerik dan tombol bagi (/) dan ENTER di keypad numerik.

Peristiwa Mouse

Peristiwa mouse dihasilkan setiap kali pengguna memindahkan mouse atau menekan atau melepaskan salah satu tombol mouse. Peristiwa mouse ditempatkan di buffer input hanya jika kondisi berikut terpenuhi:

  • Mode input konsol diatur ke ENABLE_MOUSE_INPUT (mode default).
  • Jendela konsol memiliki fokus keyboard.
  • Penunjuk mouse berada di dalam batas jendela konsol.

Jika peristiwa input adalah peristiwa mouse, anggota Peristiwa di INPUT_RECORD adalah struktur MOUSE_EVENT_RECORD yang berisi informasi berikut:

  • Koordinat penunjuk mouse dalam hal baris dan kolom sel karakter di sistem koordinat buffer layar konsol.
  • Variabel bendera yang menunjukkan status tombol mouse.
  • Variabel bendera yang menunjukkan status tombol kontrol (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, dan CAPS LOCK) dan menunjukkan apakah tombol yang ditingkatkan ditekan. Tombol yang disempurnakan untuk keyboard kunci IBM 101 dan 102 tombol adalah tombol INS, DEL, HOME, END, PAGE UP, PAGE DOWN, dan panah di kluster di sebelah kiri keypad numerik dan tombol bagi (/) dan ENTER di keypad numerik.
  • Variabel bendera yang menunjukkan apakah peristiwa tersebut adalah peristiwa tekan tombol normal atau pelepas tombol, peristiwa pergerakan mouse, atau klik kedua dari peristiwa klik ganda.

Catatan

Koordinat posisi mouse dalam hal buffer layar konsol, bukan jendela konsol. Buffer layar mungkin telah digulir sehubungan dengan jendela, sehingga sudut kiri atas jendela belum tentu koordinat (0,0) dari buffer layar konsol. Untuk menentukan koordinat mouse relatif terhadap sistem koordinat jendela, kurangi koordinat asal jendela dari koordinat posisi mouse. Gunakan fungsi GetConsoleScreenBufferInfo untuk menentukan koordinat asal jendela.

Anggota dwButtonState dari struktur MOUSE_EVENT_RECORD memiliki sedikit yang sesuai dengan setiap tombol mouse. Bit adalah 1 jika tombol tidak berfungsi dan 0 jika tombol naik. Peristiwa pelepas tombol terdeteksi oleh nilai 0 untuk anggota dwEventFlags dari MOUSE_EVENT_RECORD dan perubahan bit tombol dari 1 ke 0. Fungsi GetNumberOfConsoleMouseButtons mengambil jumlah tombol pada mouse.

Peristiwa Pengurangan Ukuran Buffer

Menu jendela konsol memungkinkan pengguna untuk mengubah ukuran buffer layar aktif; perubahan ini menghasilkan peristiwa pengubahan ukuran buffer. Peristiwa pengurangan ukuran buffer ditempatkan di buffer input jika mode input konsol diatur ke ENABLE_WINDOW_INPUT (yaitu, mode default dinonaktifkan).

Jika peristiwa input adalah peristiwa mengubah ukuran buffer, anggota Peristiwa INPUT_RECORD adalah struktur WINDOW_BUFFER_SIZE_RECORD yang berisi ukuran baru buffer layar konsol, yang dinyatakan dalam kolom dan baris sel karakter.

Jika pengguna mengurangi ukuran buffer layar konsol, data apa pun di bagian buffer yang dibuang akan hilang.

Perubahan pada ukuran buffer layar konsol sebagai akibat dari panggilan aplikasi ke fungsi SetConsoleScreenBufferSize tidak dihasilkan sebagai peristiwa pengubahan ukuran buffer.