Gambaran Umum Input Keyboard
Aplikasi harus menerima input pengguna dari keyboard serta dari mouse. Aplikasi menerima input keyboard dalam bentuk pesan yang diposting ke jendelanya.
Model Masukan Keyboard
Sistem menyediakan dukungan keyboard independen perangkat untuk aplikasi dengan menginstal driver perangkat keyboard yang sesuai untuk keyboard saat ini. Sistem menyediakan dukungan keyboard independen bahasa dengan menggunakan tata letak keyboard khusus bahasa yang saat ini dipilih oleh pengguna atau aplikasi. Driver perangkat keyboard menerima kode pemindaian dari keyboard, yang dikirim ke tata letak keyboard tempat mereka diterjemahkan ke dalam pesan dan diposting ke jendela yang sesuai di aplikasi Anda.
Setiap tombol pada keyboard diberi nilai unik yang disebut kode pemindaian , yang merupakan pengidentifikasi tergantung perangkat untuk tombol tersebut. Keyboard menghasilkan dua kode pemindaian saat pengguna mengetikkan kunci—satu saat pengguna menekan tombol dan lainnya saat pengguna merilis kunci.
Driver perangkat keyboard menginterpretasikan kode pemindaian dan menerjemahkannya ke kode kunci virtual , nilai independen perangkat yang ditentukan oleh sistem yang mengidentifikasi tujuan kunci. Setelah menerjemahkan kode pemindaian, tata letak keyboard membuat pesan yang menyertakan kode pemindaian, kode kunci virtual, dan informasi lain tentang penekanan tombol, lalu menempatkan pesan dalam antrean pesan sistem. Sistem menghapus pesan dari antrean pesan sistem dan mempostingnya ke antrean pesan dari utas yang sesuai. Akhirnya, perulangan pesan utas menghapus pesan dan meneruskannya ke prosedur jendela yang sesuai untuk diproses. Gambar berikut menunjukkan model input keyboard.
Fokus dan Aktivasi Keyboard
Sistem memposting pesan papan ketik ke antrean pesan dari utas latar depan yang membuat jendela dengan fokus papan ketik. fokus keyboard adalah sifat sementara dari sebuah jendela. Sistem berbagi keyboard di antara semua jendela pada layar dengan menggeser fokus keyboard, pada arah pengguna, dari satu jendela ke jendela lainnya. Jendela yang memiliki fokus keyboard akan menerima semua pesan keyboard (dari antrian pesan utas yang membuatnya) hingga fokus tersebut bergeser ke jendela lain.
Utas dapat memanggil fungsiGetFocusuntuk menentukan jendela mana (jika ada) yang saat ini memiliki fokus keyboard. Utas dapat memberikan fokus keyboard ke salah satu jendelanya dengan memanggil fungsi SetFocus. Ketika fokus keyboard berubah dari satu jendela ke jendela lain, sistem mengirim pesan WM_KILLFOCUS ke jendela yang telah kehilangan fokus, lalu mengirim pesan WM_SETFOCUS ke jendela yang telah mendapatkan fokus.
Konsep fokus keyboard terkait dengan jendela aktif. Jendela aktif adalah jendela tingkat atas yang saat ini digunakan pengguna. Jendela dengan fokus keyboard adalah jendela aktif, atau merupakan jendela turunan dari jendela aktif. Untuk membantu pengguna mengidentifikasi jendela aktif, sistem menempatkannya di bagian atas urutan Z dan menyoroti bilah judulnya (jika memiliki satu) dan batas.
Pengguna dapat mengaktifkan jendela tingkat atas dengan mengkliknya, memilihnya menggunakan kombinasi tombol ALT+TAB atau ALT+ESC, atau memilihnya dari Daftar Tugas. Sebuah utas dapat mengaktifkan jendela tingkat atas dengan menggunakan fungsi SetActiveWindow. Ini dapat menentukan apakah jendela tingkat atas yang dibuatnya aktif dengan menggunakan fungsiGetActiveWindow.
Ketika satu jendela dinonaktifkan dan satu lagi diaktifkan, sistem mengirim pesan WM_ACTIVATE. Kata berurutan rendah dari parameter wParam adalah nol jika jendela dinonaktifkan dan bukan nol jika diaktifkan. Saat prosedur jendela default menerima pesan WM_ACTIVATE, prosedur ini mengatur fokus keyboard ke jendela aktif.
Untuk memblokir peristiwa input keyboard dan mouse agar tidak mencapai aplikasi, gunakan BlockInput. Perhatikan, fungsi BlockInput tidak akan mengganggu tabel status input keyboard asinkron. Ini berarti bahwa memanggil fungsiSendInput saat input diblokir akan mengubah tabel status input keyboard asinkron.
Pesan Keystroke
Menekan tombol mengakibatkan pesan WM_KEYDOWN atau WM_SYSKEYDOWN ditempatkan dalam antrean pesan utas yang dilampirkan ke jendela yang memiliki fokus keyboard. Melepaskan tombol menyebabkan pesan WM_KEYUP atau WM_SYSKEYUP dimasukkan dalam antrian.
Pesan key-up dan key-down biasanya terjadi berpasangan, tetapi jika pengguna menahan tombol cukup lama untuk memulai fitur pengulangan otomatis keyboard, sistem menghasilkan sejumlah pesan WM_KEYDOWN atau WM_SYSKEYDOWN berturut-turut. Kemudian menghasilkan satu pesan WM_KEYUP atau WM_SYSKEYUP saat pengguna merilis kunci.
Bagian ini membahas topik berikut:
- Keystroke Sistem dan Nonsistem
- Kode Virtual-Key yang Dijelaskan
- Bendera Pesan Ketikan
Penekanan Tombol Sistem dan Nonsistem
Sistem ini membuat perbedaan antara penekanan tombol sistem dan penekanan tombol nonsstem. Penekanan kunci sistem menghasilkan pesan penekanan kunci sistem, WM_SYSKEYDOWN dan WM_SYSKEYUP. Penekanan kunci nonsstem menghasilkan pesan penekanan kunci nonsstem, WM_KEYDOWN dan WM_KEYUP.
Jika prosedur jendela Anda harus memproses pesan penekanan kunci sistem, pastikan setelah memproses pesan, prosedur meneruskannya ke fungsi DefWindowProc. Jika tidak, semua operasi sistem yang melibatkan tombol ALT akan dinonaktifkan setiap kali jendela memiliki fokus keyboard. Artinya, pengguna tidak akan dapat mengakses menu jendela atau menu Sistem, atau menggunakan kombinasi tombol ALT+ESC atau ALT+TAB untuk mengaktifkan jendela yang berbeda.
Pesan penekanan kunci sistem terutama untuk digunakan oleh sistem daripada oleh aplikasi. Sistem menggunakannya untuk menyediakan antarmuka keyboard bawaannya ke menu dan untuk memungkinkan pengguna mengontrol jendela mana yang aktif. Pesan penekanan tombol sistem dihasilkan ketika pengguna mengetik tombol dalam kombinasi dengan tombol ALT, atau ketika pengguna mengetik dan tidak ada jendela yang memiliki fokus keyboard (misalnya, ketika aplikasi yang aktif diminimalkan). Dalam hal ini, pesan diposting ke antrean pesan yang dilampirkan ke jendela aktif.
Pesan penekanan kunci nonsystem digunakan oleh jendela aplikasi; fungsiDefWindowProc tidak melakukan apa pun dengan pesan-pesan tersebut. Prosedur jendela dapat membuang pesan penekanan kunci nonsstem yang tidak diperlukan.
Kode Virtual-Key Dijelaskan
Parameter wParam dari pesan penekanan tombol berisi kode tombol virtual dari tombol yang ditekan atau dirilis. Prosedur jendela memproses atau mengabaikan pesan penekanan kunci, tergantung pada nilai kode kunci virtual.
Prosedur jendela umum hanya memproses subset kecil dari pesan penekanan kunci yang diterima dan mengabaikan sisanya. Misalnya, prosedur jendela mungkin hanya memproses WM_KEYDOWN pesan penekanan kunci, dan hanya yang berisi kode kunci virtual untuk kunci gerakan kursor, tombol shift (juga disebut kunci kontrol), dan kunci fungsi. Prosedur jendela umum tidak memproses pesan penekanan tombol dari tombol karakter. Sebagai gantinya, ia menggunakan fungsiTranslateMessage untuk mengonversi pesan menjadi pesan karakter. Untuk informasi selengkapnya tentang TranslateMessage dan pesan karakter, lihat pesan karakter .
Bendera Pesan Penekanan Tombol
Parameter lParam dari pesan keystroke mengandung informasi tambahan tentang keystroke yang menghasilkan pesan. Informasi ini mencakup jumlah pengulangan , kode pemindaian , bendera kunci diperluas , kode konteks , bendera status kunci sebelumnya , dan bendera status transisi . Ilustrasi berikut menunjukkan lokasi bendera dan nilai ini dalam parameter lParam.
Aplikasi dapat menggunakan nilai berikut untuk mendapatkan bendera penekanan tombol dari kata paling signifikan lParam.
Contoh kode:
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
WORD vkCode = LOWORD(wParam); // virtual-key code
WORD keyFlags = HIWORD(lParam);
WORD scanCode = LOBYTE(keyFlags); // scan code
BOOL isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED; // extended-key flag, 1 if scancode has 0xE0 prefix
if (isExtendedKey)
scanCode = MAKEWORD(scanCode, 0xE0);
BOOL wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT; // previous key-state flag, 1 on autorepeat
WORD repeatCount = LOWORD(lParam); // repeat count, > 0 if several keydown messages was combined into one message
BOOL isKeyReleased = (keyFlags & KF_UP) == KF_UP; // transition-state flag, 1 on keyup
// if we want to distinguish these keys:
switch (vkCode)
{
case VK_SHIFT: // converts to VK_LSHIFT or VK_RSHIFT
case VK_CONTROL: // converts to VK_LCONTROL or VK_RCONTROL
case VK_MENU: // converts to VK_LMENU or VK_RMENU
vkCode = LOWORD(MapVirtualKeyW(scanCode, MAPVK_VSC_TO_VK_EX));
break;
}
// ...
}
break;
Jumlah Pengulangan
Anda dapat memeriksa jumlah pengulangan untuk menentukan apakah pesan penekanan kunci mewakili lebih dari satu penekanan tombol. Sistem menaikkan jumlah saat keyboard menghasilkan pesan WM_KEYDOWN atau WM_SYSKEYDOWN lebih cepat daripada yang dapat diproses aplikasi. Ini sering terjadi ketika pengguna menahan tombol cukup lama untuk memulai fitur pengulangan otomatis keyboard. Daripada mengisi antrean pesan sistem dengan pesan penekanan tombol yang dihasilkan, sistem menggabungkan pesan-pesan tersebut menjadi satu pesan penekanan tombol dan meningkatkan jumlah pengulangan. Merilis kunci tidak dapat memulai fitur pengulangan otomatis, sehingga jumlah pengulangan untuk pesan WM_KEYUP dan WM_SYSKEYUP selalu diatur ke 1.
Kode Pemindaian
Kode pemindaian adalah nilai yang dihasilkan sistem saat pengguna menekan kunci. Ini adalah nilai yang mengidentifikasi tombol yang ditekan terlepas dari tata letak keyboard aktif, bukan karakter yang diwakili oleh tombol. Aplikasi biasanya mengabaikan kode pemindaian. Sebaliknya, ia menggunakan kode kunci virtual untuk menginterpretasikan pesan penekanan kunci.
Keyboard modern menggunakan spesifikasi Human Interface Devices (HID) untuk berkomunikasi dengan komputer. Driver keyboard mengonversi nilai Penggunaan HID yang dilaporkan, yang dikirim dari keyboard menjadi kode pemindaian, lalu meneruskannya ke aplikasi.
Nota
Meskipun kode kunci virtual biasanya lebih berguna untuk aplikasi desktop, kode pemindaian mungkin diperlukan dalam kasus tertentu ketika Anda perlu mengetahui tombol mana yang ditekan terlepas dari tata letak keyboard saat ini. Misalnya, pemetaan tombol WASD (W adalah atas, A adalah kiri, S adalah bawah, dan D adalah kanan) untuk game, yang memastikan formasi tombol yang konsisten di US QWERTY atau tata letak keyboard Prancis AZERTY.
Tabel berikut mencantumkan kumpulan Kode Pemindaian seperti yang saat ini dikenali oleh Windows. Halaman Penggunaan HID/ID Penggunaan HID/Nama Penggunaan HID mengacu pada dokumen Tabel Penggunaan HID. Nilai Lokasi Kunci mengacu pada gambar keyboard sebelumnya.
Kode Scan 1 Make dikirimkan dalam pesan WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP dan WM_INPUT.
Nama Halaman Penggunaan HID | Nama Penggunaan HID | Halaman Penggunaan HID | ID Penggunaan HID | Pindai 1 Mulai | Lokasi Kunci |
---|---|---|---|---|---|
Desktop Generik | Penghentian Daya Sistem | 0x0001 | 0x0081 | 0xE05E | |
Desktop Generik | Sistem Tidur | 0x0001 | 0x0082 | 0xE05F | |
Generik Desktop | Sistem Bangun | 0x0001 | 0x0083 | 0xE063 | |
Papan Ketik/Tombol Numpad | ErrorRollOver | 0x0007 | 0x0001 | 0x00FF | |
Papan Ketik/Keypad numerik | Papan Ketik A | 0x0007 | 0x0004 | 0x001E | 31 |
Papan Ketik/Tombol Numerik | Papan Ketik B | 0x0007 | 0x0005 | 0x0030 | 50 |
Papan Ketik/Papan Tombol | Papan Ketik C | 0x0007 | 0x0006 | 0x002E | 48 |
Papan Ketik/Pad Ketik | Papan Ketik D | 0x0007 | 0x0007 | 0x0020 | 33 |
Papan Ketik/Tombol Papan Num | Keyboard E | 0x0007 | 0x0008 | 0x0012 | 19 |
Papan Ketik/Papan Tombol | Keyboard F | 0x0007 | 0x0009 | 0x0021 | 34 |
Papan Ketik/Papan Tombol | Keyboard G | 0x0007 | 0x000A | 0x0022 | 35 |
Keyboard/Keypad | Keyboard H | 0x0007 | 0x000B | 0x0023 | 36 |
Papan Ketik/Keypad | Papan Ketik I | 0x0007 | 0x000C | 0x0017 | 24 |
Papan Ketik/Keypad | Papan Ketik J | 0x0007 | 0x000D | 0x0024 | 37 |
Papan Ketik/Tombol Angka | Keyboard K | 0x0007 | 0x000E | 0x0025 | 38 |
Papan Ketik/Tombol Angka | Keyboard L | 0x0007 | 0x000F | 0x0026 | 39 |
Papan Ketik/Tombol Numpad | Papan Ketik M | 0x0007 | 0x0010 | 0x0032 | 52 |
Papan Ketik/Panel Tombol | Papan Ketik N | 0x0007 | 0x0011 | 0x0031 | 51 |
Papan Ketik/Tuts | Papan Ketik O | 0x0007 | 0x0012 | 0x0018 | 25 |
Papan Ketik/Tuts | Papan Ketik P | 0x0007 | 0x0013 | 0x0019 | 26 |
Papan Ketik/Papan Tombol | Keyboard Q | 0x0007 | 0x0014 | 0x0010 | 17 |
Papan Ketik/Papan Tombol | Keyboard R | 0x0007 | 0x0015 | 0x0013 | 20 |
Papan Ketik/Tombol Nomor | Keyboard S | 0x0007 | 0x0016 | 0x001F | 32 |
Keyboard/Keypad | Papan Ketik T | 0x0007 | 0x0017 | 0x0014 | 21 |
Papan Ketik/Papan Tombol | Papan Ketik U | 0x0007 | 0x0018 | 0x0016 | 23 |
Keyboard/Keypad | Keyboard V | 0x0007 | 0x0019 | 0x002F | 49 |
Keyboard/Keypad | Keyboard W | 0x0007 | 0x001A | 0x0011 | 18 |
Keyboard/Keypad | Keyboard X | 0x0007 | 0x001B | 0x002D | 47 |
Keyboard/Keypad | Keyboard Y | 0x0007 | 0x001C | 0x0015 | 22 |
Papan Ketik/Papan Tombol | Keyboard Z | 0x0007 | 0x001D | 0x002C | 46 |
Keyboard/Keypad | Keyboard 1 dan Bang | 0x0007 | 0x001E | 0x0002 | 2 |
Papan Ketik/Pad Ketik | Keyboard 2 dan At | 0x0007 | 0x001F | 0x0003 | 3 |
Papan Ketik/Papan Tombol | Keyboard 3 dan Tanda Pagar | 0x0007 | 0x0020 | 0x0004 | 4 |
Papan Ketik/Papan Tombol | Keyboard 4 dan Dolar | 0x0007 | 0x0021 | 0x0005 | 5 |
Papan Ketik/Tombol Angka | Keyboard 5 dan Persen | 0x0007 | 0x0022 | 0x0006 | 6 |
Papan Ketik/Papan Tombol | Keyboard 6 dan Caret | 0x0007 | 0x0023 | 0x0007 | 7 |
Papan Ketik/Tombol Angka | Keyboard 7 dan Ampersand | 0x0007 | 0x0024 | 0x0008 | 8 |
Papan Ketik/Keypad | Keyboard 8 dan Bintang | 0x0007 | 0x0025 | 0x0009 | 9 |
Papan Ketik/Tombol Papan | Tombol 9 dan Tanda Kurung Kiri | 0x0007 | 0x0026 | 0x000A | 10 |
Papan Ketik/Tuts | Tombol Keyboard 0 dan Kurung Siku Kanan | 0x0007 | 0x0027 | 0x000B | 11 |
Papan Ketik/Papan Tombol | Keyboard KembaliKan Enter | 0x0007 | 0x0028 | 0x001C | 43 |
Papan Ketik/Papan Tombol | Keyboard Escape | 0x0007 | 0x0029 | 0x0001 | 110 |
Papan Ketik/Keypad | Hapus dengan Keyboard | 0x0007 | 0x002A | 0x000E | 15 |
Papan Ketik/Tombol Angka | Keyboard Tab | 0x0007 | 0x002B | 0x000F | 16 |
Keyboard/Keypad | Bilah Spasi Papan Ketik | 0x0007 | 0x002C | 0x0039 | 61 |
Papan Ketik/Papan Tombol | Garis Hubung dan Garis Bawah pada Keyboard | 0x0007 | 0x002D | 0x000C | 12 |
Papan Ketik/Keypad | Keyboard Sama dengan dan Plus | 0x0007 | 0x002E | 0x000D | 13 |
Papan Ketik/Papan Tombol | Tanda Kurung Kurawal Kiri pada Keyboard | 0x0007 | 0x002F | 0x001A | 27 |
Papan Ketik/Pelat Tombol | Kurung Kurawal Kanan Keyboard | 0x0007 | 0x0030 | 0x001B | 28 |
Papan Ketik/Pad Angka | Tanda Pipa dan Garis Miring pada Keyboard | 0x0007 | 0x0031 | 0x002B | 29 |
Papan Ketik/Papan Tombol | Keyboard Non-Amerika Serikat | 0x0007 | 0x0032 | 0x002B | 42 |
Papan Ketik/Papan Tombol | Papan Ketik Titik Koma dan Titik Dua | 0x0007 | 0x0033 | 0x0027 | 40 |
Papan Ketik/Tombol | Tanda Apostrof dan Tanda Kutip Ganda di Keyboard | 0x0007 | 0x0034 | 0x0028 | 41 |
Papan Ketik/Papan Tombol | Aksen Grave dan Tilde pada Keyboard | 0x0007 | 0x0035 | 0x0029 | 1 |
Papan Ketik/Papan Tombol | Koma Keyboard | 0x0007 | 0x0036 | 0x0033 | 53 |
Papan Ketik/Papan Tombol | Tombol Titik pada Keyboard | 0x0007 | 0x0037 | 0x0034 | 54 |
Papan Ketik/Papan Tombol | Keyboard Tanda Tanya | 0x0007 | 0x0038 | 0x0035 | 55 |
Papan Ketik/Tuts | Caps Lock | 0x0007 | 0x0039 | 0x003A | 30 |
Papan Ketik/Papan Tombol | Keyboard F1 (Papan Ketik F1) | 0x0007 | 0x003A | 0x003B | 112 |
Papan Ketik/Pad Ketik | Keyboard F2 | 0x0007 | 0x003B | 0x003C | 113 |
Papan Ketik/Keypad | Keyboard F3 | 0x0007 | 0x003C | 0x003D | 114 |
Papan Ketik/Papan Tombol | Keyboard F4 | 0x0007 | 0x003D | 0x003E | 115 |
Papan Ketik/Tombol-Numpad | Keyboard F5 | 0x0007 | 0x003E | 0x003F | 116 |
Papan Ketik/Papan Tombol | Papan Ketik F6 | 0x0007 | 0x003F | 0x0040 | 117 |
Papan Ketik/Papan Tombol | Keyboard F7 | 0x0007 | 0x0040 | 0x0041 | 118 |
Papan Ketik/Papan Tombol | Keyboard F8 | 0x0007 | 0x0041 | 0x0042 | 119 |
Papan Ketik/Tuts | Keyboard F9 | 0x0007 | 0x0042 | 0x0043 | 120 |
Papan Ketik/NumPad | Keyboard F10 | 0x0007 | 0x0043 | 0x0044 | 121 |
Papan Ketik/Pad Ketik | Keyboard F11 | 0x0007 | 0x0044 | 0x0057 | 122 |
Papan Ketik/Tombol Numpad | Keyboard F12 | 0x0007 | 0x0045 | 0x0058 | 123 |
Papan Ketik/Tombol | Layar Cetak Keyboard | 0x0007 | 0x0046 | 0xE037 0x0054 *Catatan 1 |
124 |
Papan Ketik/Papan Tombol | Kunci Gulir Keyboard | 0x0007 | 0x0047 | 0x0046 | 125 |
Papan Ketik/Papan Tombol | Jeda Keyboard | 0x0007 | 0x0048 | 0xE11D45 0xE046 *Catatan 2 0x0045 *Catatan 3 |
126 |
Papan Ketik/Tombol Papan | Sisipkan Keyboard | 0x0007 | 0x0049 | 0xE052 | 75 |
Papan Ketik/Pad Ketik | Beranda Keyboard | 0x0007 | 0x004A | 0xE047 | 80 |
Papan Ketik/Tombol | Keyboard PageUp | 0x0007 | 0x004B | 0xE049 | 85 |
Papan Ketik/Tuts | Hapus Maju Keyboard | 0x0007 | 0x004C | 0xE053 | 76 |
Papan Ketik/Tombol Numpad | Tombol End pada Keyboard | 0x0007 | 0x004D | 0xE04F | 81 |
Papan Ketik/Keypad | Halaman Papan TombolUnduh | 0x0007 | 0x004E | 0xE051 | 86 |
Keyboard/Keypad | Keyboard Panah Kanan | 0x0007 | 0x004F | 0xE04D | 89 |
Papan Ketik/Papan Tombol | Keyboard LeftArrow | 0x0007 | 0x0050 | 0xE04B | 79 |
Papan Ketik/Tombol Angka | Tombol Panah Bawah | 0x0007 | 0x0051 | 0xE050 | 84 |
Papan Ketik/Papan Tombol | Keyboard Panah Atas | 0x0007 | 0x0052 | 0xE048 | 83 |
Papan Ketik/Keypad | Tombol Num Lock dan Clear | 0x0007 | 0x0053 | 0x0045 0xE045 *Catatan 3 |
90 |
Papan Ketik/Tombol Angka | Keypad Garis Miring | 0x0007 | 0x0054 | 0xE035 | 95 |
Papan Ketik/Pad Tombol | Bintang Keypad | 0x0007 | 0x0055 | 0x0037 | 100 |
Papan Ketik/Tombol Pad | Tampilan Keypad | 0x0007 | 0x0056 | 0x004A | 105 |
Papan Ketik/Papan Tombol | Keypad Plus | 0x0007 | 0x0057 | 0x004E | 106 |
Keyboard/Keypad | Papan ketik ENTER | 0x0007 | 0x0058 | 0xE01C | 108 |
Papan Ketik/Pad Ketik | Keypad 1 dan End | 0x0007 | 0x0059 | 0x004F | 93 |
Papan Ketik/Papan Tombol | Keypad 2 dan Panah Bawah | 0x0007 | 0x005A | 0x0050 | 98 |
Keyboard/Papan Ketik | Keypad 3 dan PageDn | 0x0007 | 0x005B | 0x0051 | 103 |
Papan Ketik/Tombol Numerik | Keypad 4 dan Panah Kiri | 0x0007 | 0x005C | 0x004B | 92 |
Papan Ketik/Tombol Angka | Keypad 5 | 0x0007 | 0x005D | 0x004C | 97 |
Papan Ketik/Keypad | Keypad 6 dan Panah Kanan | 0x0007 | 0x005E | 0x004D | 102 |
Papan Ketik/Pad Tombol | Keypad 7 dan Home | 0x0007 | 0x005F | 0x0047 | 91 |
Papan Ketik/Tombol | Tombol Numpad 8 dan Panah Atas | 0x0007 | 0x0060 | 0x0048 | 96 |
Papan Ketik/Tombol Angka | Keypad 9 dan PageUp | 0x0007 | 0x0061 | 0x0049 | 101 |
Papan Ketik/Papan Tombol | Keypad 0 dan Sisipkan | 0x0007 | 0x0062 | 0x0052 | 99 |
Papan Ketik/Tombol | Periode Pemakaian Keypad | 0x0007 | 0x0063 | 0x0053 | 104 |
Papan Ketik/Tombol Numerik | Tombol Garis Miring Non-AS pada Papan Ketik | 0x0007 | 0x0064 | 0x0056 | 45 |
Papan Ketik/Tombol Angka | Aplikasi Keyboard | 0x0007 | 0x0065 | 0xE05D | 129 |
Papan Ketik/Tombol Angka | Tenaga Keyboard | 0x0007 | 0x0066 | 0xE05E | |
Papan Ketik/Tombol Numerik | Keypad Sama dengan | 0x0007 | 0x0067 | 0x0059 | |
Papan Ketik/Keypad | Keyboard F13 | 0x0007 | 0x0068 | 0x0064 | |
Papan Ketik/Tombol Numpad | Keyboard F14 | 0x0007 | 0x0069 | 0x0065 | |
Papan Ketik/Papan Tombol | Keyboard F15 | 0x0007 | 0x006A | 0x0066 | |
Papan Ketik/Pad Tombol | Keyboard F16 | 0x0007 | 0x006B | 0x0067 | |
Papan Ketik/Tombol Angka | Keyboard F17 | 0x0007 | 0x006C | 0x0068 | |
Papan Ketik/Tombol | Papan Ketik F18 | 0x0007 | 0x006D | 0x0069 | |
Papan Ketik/Tombol | Papan Ketik F19 | 0x0007 | 0x006E | 0x006A | |
Papan Ketik/Papan Tombol | Keyboard F20 | 0x0007 | 0x006F | 0x006B | |
Papan Ketik/Pad Tombol | Papan Ketik F21 | 0x0007 | 0x0070 | 0x006C | |
Papan Ketik/Pad Tombol | Keyboard F22 | 0x0007 | 0x0071 | 0x006D | |
Papan Ketik/Tombol Numerik | Papan Ketik F23 | 0x0007 | 0x0072 | 0x006E | |
Papan Ketik/Papan Tombol | Papan Ketik F24 | 0x0007 | 0x0073 | 0x0076 | |
Papan Ketik/Papan Tombol | Keypad Koma | 0x0007 | 0x0085 | 0x007E | 107 *Catatan 4 |
Keyboard/Keypad | Keyboard International1 | 0x0007 | 0x0087 | 0x0073 | 56 *Catatan 4, 5 |
Papan Ketik/Papan Tombol | Keyboard International2 | 0x0007 | 0x0088 | 0x0070 | 133 *Catatan 5 |
Papan Ketik/Tombol | Keyboard International3 | 0x0007 | 0x0089 | 0x007D | 14 *Catatan 5 |
Keyboard/Keypad | Keyboard International4 | 0x0007 | 0x008A | 0x0079 | 132 *Catatan 5 |
Papan Ketik/Papan Tombol | Keyboard International5 | 0x0007 | 0x008B | 0x007B | 131 *Catatan 5 |
Papan Ketik/Pad Ketik | Keyboard International6 | 0x0007 | 0x008C | 0x005C | |
Papan Ketik/Papan Tombol | Papan Ketik LANG1 | 0x0007 | 0x0090 | 0x0072 *Catatan 6 0x00F2 *Catatan 3, 6 |
|
Papan Ketik/Tutup Tombol | Keyboard LANG2 | 0x0007 | 0x0091 | 0x0071 *Catatan 6 0x00F1 *Catatan 3, 6 |
|
Papan Ketik/Papan Tombol | Papan Ketik LANG3 | 0x0007 | 0x0092 | 0x0078 | |
Papan Ketik/Papan Tombol | Papan Ketik LANG4 | 0x0007 | 0x0093 | 0x0077 | |
Papan Ketik/Papan Tombol | Keyboard LANG5 | 0x0007 | 0x0094 | 0x0076 | |
Papan Ketik/Tombol | Papan Ketik Control Kiri | 0x0007 | 0x00E0 | 0x001D | 58 |
Papan Ketik/Keypad | Papan Ketik Shift Kiri | 0x0007 | 0x00E1 | 0x002A | 44 |
Papan Ketik/Keypad | Alt Kiri | 0x0007 | 0x00E2 | 0x0038 | 60 |
Papan Ketik/Tombol Papan | Tombol GUI Kiri pada Keyboard | 0x0007 | 0x00E3 | 0xE05B | 127 |
Papan Ketik/Papan Tombol | Keyboard RightControl | 0x0007 | 0x00E4 | 0xE01D | 64 |
Papan Ketik/Papan Tombol | Keyboard RightShift | 0x0007 | 0x00E5 | 0x0036 | 57 |
Papan Ketik/Papan Tombol | Alt Kanan pada Keyboard | 0x0007 | 0x00E6 | 0xE038 | 62 |
Papan Ketik/Papan Tombol | Keyboard GUI Kanan | 0x0007 | 0x00E7 | 0xE05C | 128 |
Konsumen | Pindai Lagu Berikutnya | 0x000C | 0x00B5 | 0xE019 | |
Konsumen | Pemindai Lagu Sebelumnya | 0x000C | 0x00B6 | 0xE010 | |
Konsumen | Berhenti | 0x000C | 0x00B7 | 0xE024 | |
Konsumen | Mainkan/Jeda | 0x000C | 0x00CD | 0xE022 | |
Konsumen | Bisu | 0x000C | 0x00E2 | 0xE020 | |
Konsumen | Kenaikan Volume | 0x000C | 0x00E9 | 0xE030 | |
Konsumen | Penurunan Volume | 0x000C | 0x00EA | 0xE02E | |
Konsumen | Konfigurasi Kontrol Konsumen AL | 0x000C | 0x0183 | 0xE06D | |
Konsumen | Pembaca Email AL | 0x000C | 0x018A | 0xE06C | |
Konsumen | Kalkulator AL | 0x000C | 0x0192 | 0xE021 | |
Konsumen | Browser Mesin Lokal AL | 0x000C | 0x0194 | 0xE06B | |
Konsumen | Pencarian AC | 0x000C | 0x0221 | 0xE065 | |
Konsumen | Beranda Utama AC | 0x000C | 0x0223 | 0xE032 | |
Konsumen | AC Kembali | 0x000C | 0x0224 | 0xE06A | |
Konsumen | AC Forward | 0x000C | 0x0225 | 0xE069 | |
Konsumen | Pemutus AC | 0x000C | 0x0226 | 0xE068 | |
Konsumen | Perawatan AC | 0x000C | 0x0227 | 0xE067 | |
Konsumen | Marka Buku AC | 0x000C | 0x022A | 0xE066 |
Catatan:
- SysRq kode pemindaian tombol dikeluarkan saat penekanan tombol Alt+Print screen
- Kode pemindaian tombol dipancarkan ketika Control+Pause penekanan tombol
- Seperti yang terlihat dalam pesan keyboard versi lama
- Kuncinya ada di keyboard Brasil
- Kuncinya ada di keyboard Jepang
- Kode pemindaian hanya dipancarkan dalam peristiwa rilis kunci
Bendera Extended-Key
Bendera kunci yang diperluas menunjukkan apakah pesan penekanan tombol berasal dari salah satu tombol tambahan pada keyboard tombol 101/102 yang ditingkatkan. Tombol tambahan terdiri dari tombol ALT dan CTRL di sisi kanan keyboard; tombol INS, DEL, HOME, END, PAGE UP, PAGE DOWN, dan panah pada kelompok di sebelah kiri tombol angka; tombol NUM LOCK; tombol BREAK (CTRL+PAUSE), tombol PRINT SCRN; dan tombol bagi (/) serta tombol ENTER di keypad numerik. Kunci SHIFT sebelah kanan tidak dianggap sebagai kunci yang diperluas, kunci tersebut memiliki kode pemindaian terpisah sebagai gantinya.
Jika ditentukan, kode pemindaian terdiri dari urutan dua byte, di mana byte pertama memiliki nilai 0xE0.
Kode Konteks
Kode konteks menunjukkan apakah kunci ALT tidak berfungsi saat pesan penekanan tombol dibuat. Kodenya adalah 1 jika kunci ALT ditekan dan 0 jika tidak ditekan.
Sebelumnya Bendera Key-State
Indikator status kunci sebelumnya menunjukkan apakah kunci yang menghasilkan pesan penekanan tombol sebelumnya aktif atau nonaktif. Ini adalah 1 jika tombol sebelumnya ditekan dan 0 jika tombol sebelumnya dilepas. Anda dapat menggunakan bendera ini untuk mengidentifikasi pesan penekanan tombol yang dihasilkan oleh fitur pengulangan otomatis keyboard. Bendera ini diatur ke 1 untuk pesan penekanan kunci WM_KEYDOWN dan WM_SYSKEYDOWN yang dihasilkan oleh fitur pengulangan otomatis. Ini selalu diatur ke 1 untuk pesan WM_KEYUP dan WM_SYSKEYUP.
Bendera Transition-State
Penanda status transisi menunjukkan apakah menekan atau melepas tombol menghasilkan pesan penekanan tombol. Bendera ini selalu diatur ke 0 untuk pesan WM_KEYDOWN dan WM_SYSKEYDOWN; selalu diatur ke 1 untuk pesan WM_KEYUP dan WM_SYSKEYUP.
Pesan Karakter
Pesan keystroke memberikan banyak informasi tentang penekanan tombol, tetapi tidak memberikan kode karakter untuk penekanan tombol karakter. Untuk mengambil kode karakter, aplikasi harus menyertakan fungsi TranslateMessage dalam loop pesan thread-nya. TranslateMessage meneruskan pesan WM_KEYDOWN atau WM_SYSKEYDOWN ke tata letak keyboard. Tata letak memeriksa kode kunci virtual pesan dan, jika sesuai dengan kunci karakter, menyediakan kode karakter yang setara (dengan mempertimbangkan status tombol SHIFT dan CAPS LOCK). Kemudian menghasilkan pesan karakter yang menyertakan kode karakter dan menempatkan pesan di bagian atas antrean pesan. Iterasi loop pesan selanjutnya menghapus pesan karakter dari antrean dan mengirimkan pesan ke prosedur jendela yang sesuai.
Bagian ini membahas topik berikut:
Pesan Karakter Non-Sistem
Prosedur jendela dapat menerima pesan karakter berikut: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHAR, dan WM_UNICHAR. FungsiTranslateMessage menghasilkan pesan WM_CHAR atau WM_DEADCHAR saat memproses pesan WM_KEYDOWN. Demikian pula, ini menghasilkan pesan WM_SYSCHAR atau WM_SYSDEADCHAR saat memproses pesan WM_SYSKEYDOWN.
Aplikasi yang memproses input keyboard biasanya mengabaikan semua kecuali pesan WM_CHAR dan WM_UNICHAR, meneruskan pesan lain ke fungsiDefWindowProc. Perhatikan bahwa WM_CHAR menggunakan UTF-16 (Format Transformasi Unicode 16-bit) atau set karakter ANSI sementara WM_UNICHAR selalu menggunakan UTF-32 (Format Transformasi Unicode 32-bit). Sistem ini menggunakan pesan WM_SYSCHAR dan WM_SYSDEADCHAR untuk mengimplementasikan mnemonik menu.
Parameter wParam dari semua pesan karakter berisi kode karakter dari tombol karakter yang ditekan. Nilai kode karakter tergantung pada kelas jendela jendela yang menerima pesan. Jika versi Unicode dari fungsiRegisterClass digunakan untuk mendaftarkan kelas jendela, sistem menyediakan karakter Unicode ke semua jendela kelas tersebut. Jika tidak, sistem menyediakan kode karakter ANSI. Untuk informasi selengkapnya, lihat Mendaftarkan Kelas Jendela dan Menggunakan halaman kode UTF-8 di aplikasi Windows.
Konten dari parameter lParam dari pesan karakter adalah identik dengan konten dari parameter lParam dari pesan key-down yang diterjemahkan untuk menghasilkan pesan karakter. Untuk informasi, lihat Bendera Pesan Ketikan .
Pesan Dead-Character
Beberapa papan ketik non-Bahasa Inggris memiliki tombol karakter yang tidak dirancang untuk menghasilkan karakter secara langsung. Sebaliknya, mereka digunakan untuk menambahkan diakritik pada karakter yang dihasilkan oleh penekanan tombol berikutnya. Kunci ini disebut kunci mati . Tombol sirkumfleks pada keyboard Jerman adalah contoh tombol mati. Untuk memasukkan karakter yang terdiri dari "o" dengan sirkumfleks, pengguna Jerman akan mengetikkan kunci sirkumfleks diikuti dengan kunci "o". Jendela dengan fokus keyboard akan menerima urutan pesan berikut:
TranslateMessage menghasilkan pesan WM_DEADCHAR saat memproses pesan WM_KEYDOWN dari kunci mati. Meskipun parameter wParam dari pesan WM_DEADCHAR berisi kode karakter diakritik untuk kunci mati, aplikasi biasanya mengabaikan pesan. Sebaliknya, ia memproses pesan WM_CHAR yang dihasilkan oleh penekanan tombol berikutnya. Parameter wParam dari pesan WM_CHAR berisi kode karakter huruf dengan diakritik. Jika penekanan kunci berikutnya menghasilkan karakter yang tidak dapat dikombinasikan dengan diakritik, sistem menghasilkan dua pesan WM_CHAR. Parameter wParam yang pertama berisi kode karakter diakritik; parameter wParam dari yang kedua berisi kode karakter kunci karakter berikutnya.
FungsiTranslateMessage menghasilkan pesan WM_SYSDEADCHAR saat memproses pesan WM_SYSKEYDOWN dari tombol mati sistem (tombol mati yang ditekan dalam kombinasi dengan tombol ALT). Aplikasi biasanya mengabaikan pesan WM_SYSDEADCHAR.
Status Kunci
Saat memproses pesan keyboard, aplikasi mungkin perlu menentukan status kunci lain selain yang menghasilkan pesan saat ini. Misalnya, aplikasi pemrosesan kata yang memungkinkan pengguna menekan SHIFT+END untuk memilih blok teks harus memeriksa status tombol SHIFT setiap kali menerima pesan penekanan tombol dari tombol END. Aplikasi dapat menggunakan fungsiGetKeyStateuntuk menentukan status kunci virtual pada saat pesan saat ini dibuat; ini dapat menggunakan fungsiGetAsyncKeyState untuk mengambil status kunci virtual saat ini.
Tata letak keyboard menyimpan daftar nama. Nama kunci yang menghasilkan satu karakter sama dengan karakter yang dihasilkan oleh kunci. Nama kunci noncharacter seperti TAB dan ENTER disimpan sebagai string karakter. Aplikasi dapat mengambil nama kunci apa pun dari driver perangkat dengan memanggil fungsiGetKeyNameText.
Penekanan Tombol dan Terjemahan Karakter
Sistem ini mencakup beberapa fungsi tujuan khusus yang menerjemahkan kode pemindaian, kode karakter, dan kode kunci virtual yang disediakan oleh berbagai pesan penekanan kunci. Fungsi-fungsi ini termasuk MapVirtualKey, ToAscii, ToUnicode, dan VkKeyScan.
Selain itu, Microsoft Rich Edit 3.0 mendukung IME HexToUnicode , yang memungkinkan pengguna untuk mengonversi antara karakter heksadesimal dan Unicode dengan menggunakan tombol pintas. Ini berarti bahwa ketika Microsoft Rich Edit 3.0 dimasukkan ke dalam aplikasi, aplikasi akan mewarisi fitur IME HexToUnicode.
Dukungan Hot-Key
hot key adalah kombinasi kunci yang menghasilkan pesan WM_HOTKEY, pesan yang ditempatkan oleh sistem di bagian atas antrean pesan utas, melewati pesan yang sudah ada dalam antrean. Aplikasi menggunakan tombol panas untuk mendapatkan input keyboard berprioritas tinggi dari pengguna. Misalnya, dengan menentukan hot key yang terdiri dari kombinasi kunci CTRL+C, aplikasi dapat memungkinkan pengguna untuk membatalkan operasi yang panjang.
Untuk mendefinisikan tombol pintas, aplikasi menggunakan fungsiRegisterHotKey, menentukan kombinasi tombol yang menghasilkan pesan WM_HOTKEY, handle ke jendela untuk menerima pesan, dan pengidentifikasi tombol pintas. Saat pengguna menekan kunci pintas, pesan WM_HOTKEY ditempatkan ke dalam antrean pesan dari utas yang membuat jendela. Pesan parameter wParam berisi pengidentifikasi hotkey. Aplikasi bisa menetapkan beberapa tombol pintas untuk utas, tetapi setiap tombol pintas di utas harus memiliki pengidentifikasi unik. Sebelum aplikasi dihentikan, aplikasi harus menggunakan fungsi UnregisterHotKey untuk menghancurkan tombol pintas.
Aplikasi dapat menggunakan pengaturan tombol pintas untuk memudahkan pengguna memilih hotkey. Kontrol hot key biasanya digunakan untuk menentukan hot key yang mengaktifkan jendela; mereka tidak menggunakanRegisterHotKey dan fungsiUnregisterHotKey. Sebagai gantinya, aplikasi yang menggunakan kontrol kunci panas biasanya mengirim pesan WM_SETHOTKEY untuk mengatur kunci panas. Setiap kali pengguna menekan tombol panas, sistem mengirim pesan WM_SYSCOMMAND yang menentukan SC_HOTKEY. Untuk informasi selengkapnya tentang kontrol tombol pintas, lihat "Menggunakan Kontrol Tombol Pintas" di Kontrol Tombol Pintas.
Tombol Keyboard untuk Penjelajahan dan Fungsi Lainnya
Windows menyediakan dukungan untuk keyboard dengan kunci khusus untuk fungsi browser, fungsi media, peluncuran aplikasi, dan manajemen daya. WM_APPCOMMAND mendukung tombol keyboard tambahan. Selain itu, fungsiShellProc dimodifikasi untuk mendukung tombol keyboard tambahan.
Tidak mungkin jendela anak dalam aplikasi komponen akan dapat langsung mengimplementasikan perintah untuk tombol keyboard tambahan ini. Jadi ketika salah satu tombol ini ditekan, DefWindowProc akan mengirim pesan WM_APPCOMMAND ke jendela. DefWindowProc juga akan menggelembungkan pesan WM_APPCOMMAND ke jendela induknya. Ini mirip dengan cara menu konteks dipanggil dengan tombol kanan mouse, yaitu DefWindowProc mengirim pesan WM_CONTEXTMENU pada klik tombol kanan, dan menggelegakkannya ke induknya. Selain itu, jika DefWindowProc menerima pesan WM_APPCOMMAND untuk jendela tingkat atas, itu akan memanggil hook shell dengan kode HSHELL_APPCOMMAND.
Windows juga mendukung Microsoft IntelliMouse Explorer, yang merupakan mouse dengan lima tombol. Dua tombol tambahan mendukung navigasi browser maju dan mundur. Untuk informasi selengkapnya, lihat XBUTTONs.
Mensimulasikan Input
Untuk menyimulasikan serangkaian peristiwa input pengguna yang tidak terganggu, gunakan fungsiSendInput. Fungsi menerima tiga parameter. Parameter pertama, cInputs, menunjukkan jumlah peristiwa input yang akan disimulasikan. Parameter kedua, rgInputs, adalah array dari struktur INPUT , masing-masing menjelaskan jenis peristiwa input dan informasi tambahan tentang peristiwa tersebut. Parameter terakhir, cbSize, menerima ukuran struktur INPUT, dalam byte.
Fungsi SendInput berfungsi dengan menyuntikkan serangkaian peristiwa input yang disimulasikan ke dalam aliran input perangkat. Efeknya mirip dengan memanggil fungsi keybd_event atau mouse_event berulang kali, kecuali bahwa sistem memastikan bahwa tidak ada peristiwa input lain yang saling terkait dengan peristiwa yang disimulasikan. Ketika panggilan selesai, nilai pengembalian menunjukkan jumlah event input yang berhasil dijalankan. Jika nilai ini nol, maka input diblokir.
FungsiSendInput tidak mengatur ulang status keyboard saat ini. Oleh karena itu, jika pengguna memiliki tombol yang ditekan saat Anda memanggil fungsi ini, mereka mungkin mengganggu peristiwa yang dihasilkan fungsi ini. Jika Anda khawatir tentang kemungkinan gangguan, periksa status keyboard dengan fungsiGetAsyncKeyStatedan koreksi seperlunya.
Bahasa, Lokal, dan Tata Letak Keyboard
Bahasa adalah bahasa alami, seperti Inggris, Prancis, dan Jepang. Sublanguage adalah varian bahasa alami yang digunakan di wilayah geografis tertentu, seperti subbahasa dari bahasa Inggris yang digunakan di Inggris dan Amerika Serikat. Aplikasi menggunakan nilai, yang disebut pengidentifikasi bahasa , untuk mengidentifikasi bahasa dan sublanguage secara unik.
Aplikasi biasanya menggunakan lokal untuk mengatur bahasa tempat input dan output diproses. Mengatur lokal untuk keyboard, misalnya, memengaruhi nilai karakter yang dihasilkan oleh keyboard. Mengatur lokal untuk tampilan atau printer mempengaruhi glif yang ditampilkan atau dicetak. Aplikasi mengatur lokal untuk keyboard dengan memuat dan menggunakan tata letak keyboard. Mereka mengatur lokal untuk tampilan atau printer dengan memilih font yang mendukung lokal yang ditentukan.
Tata letak keyboard tidak hanya menentukan posisi fisik tombol pada keyboard tetapi juga menentukan nilai karakter yang dihasilkan dengan menekan tombol tersebut. Setiap tata letak mengidentifikasi bahasa input saat ini dan menentukan nilai karakter mana yang dihasilkan oleh kunci dan kombinasi kunci.
Setiap tata letak keyboard memiliki handel yang sesuai yang mengidentifikasi tata letak dan bahasa. Kata "rendah" dari nama adalah pengidentifikasi bahasa. Kata tinggi adalah pegangan perangkat yang menentukan tata letak fisik, atau bernilai nol, yang menunjukkan tata letak fisik default. Pengguna dapat mengaitkan bahasa input apa pun dengan tata letak fisik. Misalnya, pengguna berbahasa Inggris yang kadang-kadang bekerja dalam bahasa Prancis dapat mengatur bahasa input keyboard ke bahasa Prancis tanpa mengubah tata letak fisik keyboard. Ini berarti pengguna dapat memasukkan teks dalam bahasa Prancis menggunakan tata letak bahasa Inggris yang familier.
Aplikasi umumnya tidak diharapkan untuk memanipulasi bahasa input secara langsung. Sebagai gantinya, pengguna menyiapkan kombinasi bahasa dan tata letak, lalu beralih di antara mereka. Ketika pengguna mengklik teks yang ditandai dengan bahasa yang berbeda, aplikasi memanggil fungsi ActivateKeyboardLayout untuk mengaktifkan tata letak default pengguna untuk bahasa tersebut. Jika pengguna mengedit teks dalam bahasa yang tidak ada dalam daftar aktif, aplikasi dapat memanggil fungsi LoadKeyboardLayout dengan bahasa untuk mendapatkan tata letak berdasarkan bahasa tersebut.
Fungsi ActivateKeyboardLayout mengatur bahasa input untuk tugas saat ini. Parameter hkl dapat berupa handle ke tata letak keyboard atau pengidentifikasi bahasa yang diperpanjang nol. Handel tata letak keyboard dapat diperoleh dari fungsi LoadKeyboardLayout atau GetKeyboardLayoutList. Nilai HKL_NEXT dan HKL_PREV juga dapat digunakan untuk memilih keyboard berikutnya atau sebelumnya.
Fungsi GetKeyboardLayoutName mengambil nama tata letak keyboard aktif untuk thread yang memanggil. Jika aplikasi membuat tata letak aktif menggunakan fungsi LoadKeyboardLayout, GetKeyboardLayoutName mengambil string yang sama yang digunakan untuk membuat tata letak. Jika tidak, string adalah pengidentifikasi bahasa utama yang sesuai dengan lokal tata letak aktif. Ini berarti fungsi mungkin belum tentu membedakan antara tata letak yang berbeda dengan bahasa utama yang sama, jadi tidak dapat mengembalikan informasi spesifik tentang bahasa input. FungsiGetKeyboardLayout dapat digunakan untuk menentukan bahasa input.
Fungsi LoadKeyboardLayout memuat tata letak keyboard dan membuat tata letak tersedia untuk pengguna. Aplikasi dapat segera mengaktifkan tata letak untuk utas saat ini dengan menggunakan nilai KLF_ACTIVATE. Aplikasi dapat menggunakan nilai KLF_REORDER untuk menyusun ulang tata letak tanpa juga menentukan nilai KLF_ACTIVATE. Aplikasi harus selalu menggunakan nilai KLF_SUBSTITUTE_OK saat memuat tata letak keyboard untuk memastikan bahwa preferensi pengguna, jika ada, dipilih.
Untuk dukungan multibahasa, fungsi LoadKeyboardLayout menyediakan bendera KLF_REPLACELANG dan KLF_NOTELLSHELL. Bendera KLF_REPLACELANG mengarahkan fungsi untuk mengganti tata letak keyboard yang ada tanpa mengubah bahasa. Mencoba mengganti tata letak yang ada menggunakan pengidentifikasi bahasa yang sama tetapi tanpa menentukan KLF_REPLACELANG adalah kesalahan. Tanda KLF_NOTELLSHELL mencegah fungsi program memberi tahu shell ketika tata letak keyboard ditambahkan atau diganti. Ini berguna untuk aplikasi yang menambahkan beberapa tata letak dalam serangkaian panggilan berturut-turut. Bendera ini harus digunakan di semua kecuali panggilan terakhir.
FungsiUnloadKeyboardLayout dibatasi karena tidak dapat membongkar bahasa input default sistem. Ini memastikan bahwa pengguna selalu memiliki satu tata letak yang tersedia untuk memasukkan teks menggunakan set karakter yang sama seperti yang digunakan oleh shell dan sistem file.