Bagikan melalui


Pembuatan Konsol

Sistem membuat konsol baru saat memulai proses konsol, proses mode karakter yang titik masuknya adalah fungsi utama. Misalnya, sistem membuat konsol baru saat memulai prosesor cmd.exeperintah . Saat prosesor perintah memulai proses konsol baru, pengguna dapat menentukan apakah sistem membuat konsol baru untuk proses baru atau apakah itu mewarisi konsol prosesor perintah.

Proses dapat membuat konsol dengan menggunakan salah satu metode berikut:

  • Antarmuka pengguna grafis (GUI) atau proses konsol dapat menggunakan fungsi CreateProcess dengan CREATE_NEW_CONSOLE untuk membuat proses konsol dengan konsol baru. (Secara default, proses konsol mewarisi konsol induknya, dan tidak ada jaminan bahwa input diterima oleh proses yang dimaksudkannya.)
  • GUI atau proses konsol yang saat ini tidak dilampirkan ke konsol dapat menggunakan fungsi AllocConsole untuk membuat konsol baru. (Proses GUI tidak dilampirkan ke konsol saat dibuat. Proses konsol tidak dilampirkan ke konsol jika dibuat menggunakan CreateProcess dengan DETACHED_PROCESS.)

Biasanya, proses menggunakan AllocConsole untuk membuat konsol ketika terjadi kesalahan yang memerlukan interaksi dengan pengguna. Misalnya, proses GUI dapat membuat konsol ketika terjadi kesalahan yang mencegahnya menggunakan antarmuka grafis normal, atau proses konsol yang biasanya tidak berinteraksi dengan pengguna dapat membuat konsol untuk menampilkan kesalahan.

Proses juga dapat membuat konsol dengan menentukan bendera CREATE_NEW_CONSOLE dalam panggilan ke CreateProcess. Metode ini membuat konsol baru yang dapat diakses oleh proses anak tetapi tidak untuk proses induk. Konsol terpisah memungkinkan proses induk dan anak berinteraksi dengan pengguna tanpa konflik. Jika bendera ini tidak ditentukan ketika proses konsol dibuat, kedua proses dilampirkan ke konsol yang sama, dan tidak ada jaminan bahwa proses yang benar akan menerima input yang ditujukan untuknya. Aplikasi dapat mencegah kebingungan dengan membuat proses turunan yang tidak mewarisi handel buffer input, atau dengan mengaktifkan hanya satu proses anak sekaligus untuk mewarisi handel buffer input sambil mencegah proses induk membaca input konsol hingga anak selesai.

Membuat konsol baru menghasilkan jendela konsol baru, serta buffer I/O terpisah untuk output ke layar dan input dari pengguna. Proses yang terkait dengan konsol baru menggunakan fungsi GetStdHandle untuk mendapatkan handel input konsol baru dan buffer layar. Handel ini memungkinkan proses untuk mengakses konsol.

Saat proses menggunakan CreateProcess, proses ini dapat menentukan struktur STARTUPINFO, yang anggotanya mengontrol karakteristik konsol baru pertama (jika ada) yang dibuat untuk proses anak. Struktur STARTUPINFO yang ditentukan dalam panggilan ke CreateProcess memengaruhi konsol yang dibuat jika bendera CREATE_NEW_CONSOLE ditentukan. Ini juga memengaruhi konsol yang dibuat jika proses turunan kemudian menggunakan AllocConsole. Karakteristik konsol berikut dapat ditentukan:

  • Ukuran jendela konsol baru, dalam sel karakter
  • Lokasi jendela konsol baru, dalam koordinat piksel layar
  • Ukuran buffer layar konsol baru, dalam sel karakter
  • Atribut warna teks dan latar belakang dari buffer layar konsol baru
  • Nama tampilan untuk bilah judul jendela konsol baru

Sistem menggunakan nilai default jika nilai STARTUPINFO tidak ditentukan. Proses anak dapat menggunakan fungsi GetStartupInfo untuk menentukan nilai dalam struktur STARTUPINFO-nya.

Proses tidak dapat mengubah lokasi jendela konsolnya di layar, tetapi fungsi konsol berikut tersedia untuk mengatur atau mengambil properti lain yang ditentukan dalam struktur STARTUPINFO.

Function Deskripsi
GetConsoleScreenBufferInfo Mengambil ukuran jendela, ukuran buffer layar, dan atribut warna.
SetConsoleWindowInfo Mengubah ukuran jendela konsol.
SetConsoleScreenBufferSize Mengubah ukuran buffer layar konsol.
SetConsoleTextAttribute Mengatur atribut warna.
SetConsoleTitle Mengatur judul jendela konsol.
GetConsoleTitle Mengambil judul jendela konsol.

Proses dapat menggunakan fungsi FreeConsole untuk melepaskan dirinya dari konsol yang diwariskan atau dari konsol yang dibuat oleh AllocConsole.

Proses dapat menggunakan fungsi AttachConsole untuk melampirkan dirinya ke sesi konsol lain yang ada setelah menggunakan FreeConsole untuk melepaskan dari sesinya sendiri (atau jika tidak ada sesi terlampir).