Handel Konsol

Proses konsol menggunakan handel untuk mengakses buffer input dan layar konsolnya. Proses dapat menggunakan fungsi GetStdHandle, CreateFile, atau CreateConsoleScreenBuffer untuk membuka salah satu handel ini.

Fungsi GetStdHandle menyediakan mekanisme untuk mengambil input standar (STDIN), output standar (STDOUT), dan handel kesalahan standar (STDERR) yang terkait dengan proses. Selama pembuatan konsol, sistem membuat handel ini. Awalnya, STDIN adalah pegangan ke buffer input konsol, dan STDOUT merupakan STDERR handel dari buffer layar aktif konsol. Namun, fungsi SetStdHandle dapat mengalihkan handel standar dengan mengubah handel yang terkait dengan STDIN, , STDOUTatau STDERR. Karena handel standar induk diwariskan oleh proses turunan apa pun, panggilan berikutnya ke GetStdHandle mengembalikan handel yang dialihkan. Handel yang dikembalikan oleh GetStdHandle dapat, oleh karena itu, merujuk ke sesuatu selain I/O konsol. Misalnya, sebelum membuat proses anak, proses induk dapat menggunakan SetStdHandle untuk mengatur handel pipa menjadi STDIN handel yang diwariskan oleh proses turunan. Ketika proses anak memanggil GetStdHandle, ia mendapatkan handel pipa. Ini berarti bahwa proses induk dapat mengontrol handel standar proses anak. Handel yang dikembalikan oleh GetStdHandle memiliki GENERIC_READ | GENERIC_WRITE akses kecuali SetStdHandle telah digunakan untuk mengatur handel standar agar memiliki akses yang lebih rendah.

Nilai handel yang dikembalikan oleh GetStdHandle bukan 0, 1, dan 2, sehingga konstanta aliran standar yang telah ditentukan sebelumnya di Stdio.h (STDIN, , STDOUTdan STDERR) tidak dapat digunakan dalam fungsi yang memerlukan handel konsol.

Fungsi CreateFile memungkinkan proses untuk mendapatkan handel ke buffer input konsol dan buffer layar aktifnya, bahkan jika STDIN dan STDOUT telah dialihkan. Untuk membuka handel ke buffer input konsol, tentukan CONIN$ nilai dalam panggilan ke CreateFile. CONOUT$ Tentukan nilai dalam panggilan ke CreateFile untuk membuka handel ke buffer layar aktif konsol. CreateFile memungkinkan Anda menentukan akses baca/tulis handel yang dikembalikannya.

Fungsi CreateConsoleScreenBuffer membuat buffer layar baru dan mengembalikan handel. Handel ini dapat digunakan dalam fungsi apa pun yang menerima handel ke output konsol. Buffer layar baru tidak aktif (ditampilkan) hingga handelnya ditentukan dalam panggilan ke fungsi SetConsoleActiveScreenBuffer. Perhatikan bahwa mengubah buffer layar aktif tidak memengaruhi handel yang dikembalikan oleh GetStdHandle. Demikian pula, menggunakan SetStdHandle untuk mengubah STDOUT handel tidak memengaruhi buffer layar aktif.

Handel konsol yang dikembalikan oleh CreateFile dan CreateConsoleScreenBuffer dapat digunakan di salah satu fungsi konsol yang memerlukan handel ke buffer input konsol atau buffer layar konsol. Handel yang dikembalikan oleh GetStdHandle dapat digunakan oleh fungsi konsol jika belum dialihkan untuk merujuk ke sesuatu selain I/O konsol. Namun, jika handel standar telah dialihkan untuk merujuk ke file atau pipa, handel hanya dapat digunakan oleh fungsi ReadFile dan WriteFile. GetFileType dapat membantu menentukan jenis perangkat apa yang dirujuk oleh handel. Handel konsol disajikan sebagai FILE_TYPE_CHAR.

Proses dapat menggunakan fungsi DuplicateHandle untuk membuat handel konsol duplikat yang memiliki akses atau pewarisan yang berbeda dari handel asli. Namun, perhatikan bahwa proses dapat membuat handel konsol duplikat hanya untuk penggunaannya sendiri. Ini berbeda dari jenis handel lain (seperti file, pipa, atau objek mutex), di mana DuplicateHandle dapat membuat duplikat yang valid untuk proses yang berbeda. Akses ke konsol harus dibagikan selama pembuatan proses lain atau dapat diminta oleh proses lain melalui mekanisme AttachConsole.

Untuk menutup handel konsol, proses dapat menggunakan fungsi CloseHandle.