Megosztás a következőn keresztül:


Billentyűzetbemenet áttekintése

Az alkalmazásoknak a billentyűzetről és az egérről is el kell fogadniuk a felhasználói bevitelt. Az alkalmazások billentyűzetbemenetet kapnak az ablakaiban közzétett üzenetek formájában.

Billentyűzetbemeneti modell

A rendszer eszközfüggetlen billentyűzettámogatást biztosít az alkalmazásokhoz az aktuális billentyűzetnek megfelelő billentyűzetillesztő telepítésével. A rendszer nyelvfüggetlen billentyűzettámogatást biztosít a felhasználó vagy az alkalmazás által jelenleg kiválasztott nyelvspecifikus billentyűzetkiosztással. A billentyűzet eszközillesztője a billentyűzetről kap vizsgálati kódokat, amelyeket a rendszer a billentyűzetkiosztásba küld, ahol azokat üzenetekké fordítja le, és az alkalmazás megfelelő ablakaiba küldi.

A billentyűzet minden egyes kulcsához hozzárendelt egyedi érték, az úgynevezett vizsgálati kód, amely a billentyűzet kulcsának eszközfüggő azonosítója. A billentyűzet két vizsgálati kódot hoz létre, amikor a felhasználó begépeli a kulcsot – egyet, amikor a felhasználó lenyomja a kulcsot, a másikat pedig, amikor a felhasználó felengedi a kulcsot.

A billentyűzeteszköz-illesztőprogram értelmezi a vizsgálati kódot, és lefordítja (leképezi) egy virtuáliskulcs-kódra, amely a rendszer által meghatározott eszközfüggetlen érték, amely azonosítja a kulcs célját. A beolvasási kód fordítása után a billentyűzetkiosztás létrehoz egy üzenetet, amely tartalmazza a beolvasási kódot, a virtuáliskulcs-kódot és a billentyűleütéssel kapcsolatos egyéb információkat, majd elhelyezi az üzenetet a rendszer üzenetsorában. A rendszer eltávolítja az üzenetet a rendszer üzenetsorából, és közzéteszi azt a megfelelő szál üzenetsorába. Végül a szál üzenet-hurok eltávolítja az üzenetet, és átadja a megfelelő ablakeljárásnak a feldolgozáshoz. Az alábbi ábra a billentyűzet beviteli modelljét mutatja be.

billentyűzetbemenet-feldolgozási modell

Billentyűzetfókusz és aktiválás

A rendszer a billentyűzetfókuszú ablakot létrehozó előtérszál üzenetsorába küldi a billentyűzetüzeneteket. A billentyűzetfókusz egy ablak ideiglenes tulajdonsága. A rendszer úgy osztja meg a billentyűzetet a kijelző összes ablaka között, hogy a billentyűzetfókuszt a felhasználó irányából az egyik ablakból a másikba helyezi. A billentyűzetfókuszt tartalmazó ablak (az azt létrehozó szál üzenetsorából) az összes billentyűzetüzenetet megkapja, amíg a fókusz egy másik ablakra nem változik.

Egy szál meghívhatja a GetFocus függvényt annak megállapításához, hogy jelenleg melyik ablaka (ha van ilyen) rendelkezik a billentyűzetfókuszsal. A szálak a SetFocus függvény meghívásával az egyik ablakára irányíthatják a billentyűzet fókuszát. Amikor a billentyűzetfókusz egyik ablakról a másikra változik, a rendszer egy WM_KILLFOCUS üzenetet küld a fókuszt elveszítő ablaknak, majd egy WM_SETFOCUS üzenetet küld a fókuszba került ablaknak.

A billentyűzetfókusz fogalma az aktív ablakhoz kapcsolódik. Az aktív ablak az a legfelső szintű ablak, amellyel a felhasználó jelenleg dolgozik. A billentyűzetfókuszú ablak vagy az aktív ablak, vagy az aktív ablak gyermekablaka. Annak érdekében, hogy a felhasználó azonosítani tudja az aktív ablakot, a rendszer a Z sorrend tetején helyezi el, és kiemeli annak címsorát (ha van ilyen) és szegélyt.

A felhasználó a felső szintű ablak aktiválásához kattintson rá, jelölje ki az ALT+TAB vagy ALT+ESC billentyűkombinációval, vagy válassza ki a feladatlistából. A szál a SetActiveWindow függvény használatával aktiválhat felső szintű ablakot. Az GetActiveWindow függvénnyel meghatározhatja, hogy a létrehozott legfelső szintű ablak aktív-e.

Ha az egyik ablak inaktiválva van, a másik pedig aktiválva van, a rendszer elküldi a WM_ACTIVATE üzenetet. A wParam paraméter alacsonyrendű szava nulla, ha az ablak deaktiválódik, és nem nulla, ha aktiválódik. Amikor az alapértelmezett ablakelrendezési eljárás megkapja a WM_ACTIVATE üzenetet, a billentyűzetfókuszt az aktív ablakra állítja.

Ha meg szeretné akadályozni, hogy a billentyűzet- és egérbemeneti események elérjék az alkalmazásokat, használja BlockInput. Vegye figyelembe, hogy a BlockInput függvény nem zavarja az aszinkron billentyűzet beviteli állapot tábláját. Ez azt jelenti, hogy a SendInput függvény meghívása, miközben a bemenet le van tiltva, megváltoztatja az aszinkron billentyűzet bemeneti-állapot tábláját.

Billentyűleütés üzenetek

A billentyű lenyomásával WM_KEYDOWN vagy WM_SYSKEYDOWN üzenet kerül a billentyűzetfókuszú ablakhoz csatolt üzenetsorba. A kulcs felszabadításával WM_KEYUP vagy WM_SYSKEYUP üzenet kerül az üzenetsorba.

A key-up és a key-down üzenetek általában párban fordulnak elő, de ha a felhasználó elég hosszú ideig tartja lenyomva a billentyűt ahhoz, hogy elindítsa a billentyűzet automatikus ismétlési funkcióját, a rendszer számos WM_KEYDOWN vagy WM_SYSKEYDOWN üzenetet generál egy sorban. Ezután egyetlen WM_KEYUP vagy WM_SYSKEYUP üzenetet generál, amikor a felhasználó kiadja a kulcsot.

Ez a szakasz a következő témaköröket ismerteti:

Rendszer- és nemrendszer-billentyűleütések

A rendszer különbséget tesz a rendszer billentyűleütései és a nem rendszerszintű billentyűleütések között. A rendszerleütések létrehozzák a rendszerleütési üzeneteket, WM_SYSKEYDOWN és WM_SYSKEYUP. A nem rendszerszintű billentyűleütések nem rendszerkulcs-üzeneteket, WM_KEYDOWN és WM_KEYUPhoznak létre.

Ha az ablakeljárásnak fel kell dolgoznia egy rendszerbillentyű üzenetet, győződjön meg arról, hogy az üzenet feldolgozása után az eljárás átadja azt a DefWindowProc függvénynek. Ellenkező esetben az ALT billentyűvel kapcsolatos összes rendszerművelet le lesz tiltva, amikor az ablak fókusza a billentyűzetre kerül. Vagyis a felhasználó nem fogja tudni elérni az ablak menüit vagy a Rendszer menüt, vagy az ALT+ESC vagy AZ ALT+TAB billentyűkombinációval aktiválni egy másik ablakot.

A billentyűparancs üzeneteket elsősorban a rendszer használja, nem pedig egy alkalmazás. A rendszer arra használja őket, hogy beépített billentyűzetfelületet biztosítson a menükhöz, és hogy a felhasználó szabályozhassa, hogy melyik ablak aktív. A rendszerleütési üzenetek akkor jönnek létre, amikor a felhasználó az ALT billentyűvel együtt leüt egy billentyűt, vagy amikor a felhasználó gépel, és egyetlen ablak sincs a billentyűzet fókuszában (például amikor az aktív alkalmazás minimalizálva van). Ebben az esetben az üzenetek az aktív ablakhoz csatolt üzenetsorba kerülnek.

A nem rendszerszintű billentyűleütési üzeneteket az alkalmazásablakok használják; a DefWindowProc függvény nem tesz velük semmit. Az ablakos eljárás elvetheti azokat a nem rendszerszintű billentyűleütési üzeneteket, amelyekre nincs szüksége.

Virtual-Key kódok leírása

A wParam billentyűleütési üzenet paramétere tartalmazza a lenyomott vagy kiadott kulcs virtuáliskulcs-kódját. Az ablakművelet a virtuális kulcs kódjának értékétől függően feldolgoz vagy figyelmen kívül hagy egy billentyűleütési üzenetet.

Egy tipikus ablakművelet csak a kapott billentyűleütési üzenetek egy kis részét dolgozza fel, és figyelmen kívül hagyja a többit. Egy ablakművelet például csak WM_KEYDOWN billentyűleütési üzeneteket dolgoz fel, és csak azokat, amelyek a kurzormozgatási kulcsokhoz, a shift billentyűkhöz (más néven vezérlőkulcsokhoz) és a függvénykulcsokhoz tartalmaznak virtuáliskulcs-kódokat. Egy tipikus ablakművelet nem dolgozza fel a karakterbillentyűkről érkező billentyűleütéseket. Ehelyett a TranslateMessage függvénnyel konvertálja az üzenetet karakterüzenetekké. A TranslateMessage és a karakterüzenetekről további információt Karakterüzenetekcímű témakörben talál.

Billentyűleütés üzenetjelzői

A lParam billentyűleütési üzenet paramétere további információkat tartalmaz az üzenetet létrehozó billentyűleütésről. Ezek az információk tartalmazzák az ismétlések számát, a szkennelési kódot, a kiterjesztett kulcsú jelzőt, a környezeti kódot, az előző kulcsállapot-jelzőt , valamint az átmeneti állapotjelzőt. Az alábbi ábrán a zászlók és értékek helye látható az lParam paraméterben.

a billentyűleütési üzenet lparam paraméterében található jelölők és értékek helye

Egy alkalmazás az alábbi értékekkel lekérheti a billentyűleütésjelzőket a lParammagasrendű szójából.

Érték Leírás
KF_EXTENDED
0x0100
Módosítja a kiterjesztett kulcsjelölőt.
KF_DLGMODE
0x0800
Módosítja a párbeszédpanel módjelzőt, amely azt jelzi, hogy egy párbeszédpanel aktív-e.
KF_MENUMODE
0x1000
Módosítja a menümód jelzőt, amely azt jelzi, hogy egy menü aktív-e.
KF_ALTDOWN
0x2000
Módosítja a környezeti kódjelölőt.
KF_REPEAT
0x4000
Módosítja a előző kulcsállapot-jelző-t.
KF_UP
0x8000
Módosítja a átmeneti állapotjelzőt.

Példakód:

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;

Ismétlések száma

Ellenőrizheti az ismétlések számát annak megállapításához, hogy egy billentyűleütési üzenet több billentyűleütést jelöl-e. A rendszer növeli a számokat, amikor a billentyűzet gyorsabban generál WM_KEYDOWN vagy WM_SYSKEYDOWN üzeneteket, mint amennyit egy alkalmazás feldolgozhat. Ez gyakran akkor fordul elő, ha a felhasználó elég hosszú ideig tartja lenyomva a billentyűzet automatikus ismétlési funkcióját. A rendszer nem azzal tölti ki az üzenetsort, hogy az eredményül kapott lenyomott billentyű üzeneteket egyenként hozzáadja, hanem egyetlen billentyűlenyomás üzenetté egyesíti őket, és növeli az ismétlési számlálót. A kulcs felszabadítása nem indíthatja el az automatikus ismétlési funkciót, így az WM_KEYUP és WM_SYSKEYUP üzenetek ismétlési száma mindig 1-re van állítva.

Kódok beolvasása

4- es típusú billentyűzet diagramja az egyes kulcsok kulcshelyeivel.

A vizsgálati kód az az érték, amelyet a rendszer generál, amikor a felhasználó lenyom egy kulcsot. Ez az érték azonosítja a lenyomott billentyűt az aktív billentyűzetkiosztástól függetlenül, szemben a billentyű által képviselt karakterrel. Az alkalmazások általában figyelmen kívül hagyják a vizsgálati kódokat. Ehelyett a virtuáliskulcs-kódokat használja a billentyűleütési üzenetek értelmezéséhez.

A modern billentyűzetek Human Interface Devices (HID) specifikációt használnak a számítógéppel való kommunikációhoz. Billentyűzetillesztő átalakítja a billentyűzetről küldött jelentett HID-használati értékeket kódok vizsgálatára és az alkalmazásoknak való továbbításra.

Jegyzet

Bár a virtuális kulcskódok általában hasznosabbak az asztali alkalmazások számára, bizonyos esetekben szükség lehet vizsgálati kódokra, ha tudnia kell, hogy melyik billentyű van lenyomva, függetlenül az aktuális billentyűzetkiosztástól. Például a WASD (W felfelé, az A balra, az S lefelé, a D pedig jobbra) billentyűkötések a játékokhoz, amelyek egységes billentyűzetkiosztást biztosítanak amerikai QWERTY vagy francia AZERTY billentyűzetkiosztásoknál.

Az alábbi táblázat a Windows által jelenleg felismert vizsgálati kódok készletét sorolja fel. HID használati lap/HID-használati azonosító/HID-használat neve értékek a HID-használati táblákra dokumentumra hivatkoznak. A key location értékek az előző billentyűzetképre hivatkoznak.

A Scan 1 Make kód WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP és WM_INPUT üzenetekben lesz kézbesítve.

HID használati lap neve HID használat neve HID használati lap HID-használat azonosítója Szkennelés 1 készítése Kulcs helye
Általános asztali felület Rendszer lekapcsolása 0x0001 0x0081 0xE05E
Generikus munkaasztal Rendszer alvó üzemmód 0x0001 0x0082 0xE05F
Általános munkaasztal Rendszer ébresztés 0x0001 0x0083 0xE063
Billentyűzet/billentyűzetpanel ErrorRollOver 0x0007 0x0001 0x00FF
Billentyűzet/Numerikus billentyűzet Billentyűzet A 0x0007 0x0004 0x001E 31
Billentyűzet/numerikus billentyűzet B billentyűzet 0x0007 0x0005 0x0030 50
Billentyűzet/numerikus billentyűzet C billentyűzet 0x0007 0x0006 0x002E 48
Billentyűzet/numerikus billentyűzet D billentyű 0x0007 0x0007 0x0020 33
Billentyűzet/billentyűzetpad E billentyűzet 0x0007 0x0008 0x0012 19
Billentyűzet/billentyűzet Billentyűzet F 0x0007 0x0009 0x0021 34
Billentyűzet/billentyűzetkiosztás G billentyűzet 0x0007 0x000A 0x0022 35
Billentyűzet/numerikus billentyűzet Billentyűzet H 0x0007 0x000B 0x0023 36
Billentyűzet/nagygombos I. billentyűzet 0x0007 0x000C 0x0017 24
Billentyűzet/billentyűzetpanel Billentyűzet J 0x0007 0x000D 0x0024 37
Billentyűzet/numerikus billentyűzet K billentyűzet 0x0007 0x000E 0x0025 38
Billentyűzet/numerikus billentyűzet Billentyűzet L 0x0007 0x000F 0x0026 39
Billentyűzet/billentyűzet Billentyűzet M 0x0007 0x0010 0x0032 52
Billentyűzet/numerikus billentyűzet N billentyűzet 0x0007 0x0011 0x0031 51
Billentyűzet/billentyű vagy numerikus billentyűzet Billentyűzet O 0x0007 0x0012 0x0018 25
Billentyűzet/numerikus billentyűzet P billentyűzet 0x0007 0x0013 0x0019 26
Billentyűzet/numerikus billentyűzet Billentyűzet Q 0x0007 0x0014 0x0010 17
Billentyűzet/billentyűzet-pult Billentyűzet R 0x0007 0x0015 0x0013 20
Billentyűzet/numerikus billentyűzet Billentyűzet S 0x0007 0x0016 0x001F 32
Billentyűzet/billentyűzet rész T billentyűzet 0x0007 0x0017 0x0014 21
Billentyűzet/billentyűzet U billentyűzet 0x0007 0x0018 0x0016 23
Billentyűzet/billentyűzet Billentyűzet V 0x0007 0x0019 0x002F 49
Billentyűzet/numerikus billentyűzet Billentyűzet W 0x0007 0x001A 0x0011 18
Billentyűzet/Numerikus billentyűzet X billentyűzet 0x0007 0x001B 0x002D 47
Billentyűzet/numerikus billentyűzet Billentyűzet Y 0x0007 0x001C 0x0015 22
Billentyűzet/billentyűzet Z billentyűzet 0x0007 0x001D 0x002C 46
Billentyűzet/kezelőbillentyűzet Billentyűzet 1 és Bang 0x0007 0x001E 0x0002 2
Billentyűzet/billentyűzet Billentyűzet 2 és At 0x0007 0x001F 0x0003 3
Billentyűzet/numerikus billentyűzet 3. billentyűzet és kivonat 0x0007 0x0020 0x0004 4
Billentyűzet/numerikus billentyűzet 4. billentyűzet és dollár 0x0007 0x0021 0x0005 5
Billentyűzet/numerikus billentyűzet 5. billentyűzet és százalék 0x0007 0x0022 0x0006 6
Billentyűzet/billentyűzet-panel Billentyűzet 6 és Caret 0x0007 0x0023 0x0007 7
Billentyűzet/numerikus billentyűzet Billentyűzet 7 és Ampersand 0x0007 0x0024 0x0008 8
Billentyűzet/Billentyűzetgombok 8. billentyűzet és csillag 0x0007 0x0025 0x0009 9
Billentyűzet/numerikus billentyűzet 9-es billentyű és bal szögletes zárójel 0x0007 0x0026 0x000A 10
Billentyűzet/Billentyűtömb 0 billentyű és jobb zárójel 0x0007 0x0027 0x000B 11
Billentyűzet/billentyűs tömb Billentyűzet visszatérési enter 0x0007 0x0028 0x001C 43
Billentyűzet/Numerikus billentyűzet Billentyűkioldó 0x0007 0x0029 0x0001 110
Billentyűzet/Billentyűzet pad Billentyűzet törlése 0x0007 0x002A 0x000E 15
Billentyűzet/tastatúra Billentyűzet lap 0x0007 0x002B 0x000F 16
Billentyűzet/numerikus billentyűzet Billentyűzet szóköz 0x0007 0x002C 0x0039 61
Billentyűzet/billentyűzet vagy számkijelző Billentyűzet kötőjele és aláhúzásjele 0x0007 0x002D 0x000C 12
Billentyűzet/numerikus billentyűzet Billentyűzet egyenlő és plusz 0x0007 0x002E 0x000D 13
Billentyűzet/numerikus billentyűzet Billentyűzet bal oldali zárójele 0x0007 0x002F 0x001A 27
Billentyűzet/numerikus billentyűzet Billentyűzet jobb oldali zárójele 0x0007 0x0030 0x001B 28
Billentyűzet/billentyűzet Billentyűzet csővonal és perjelezés 0x0007 0x0031 0x002B 29
Billentyűzet/Numerikus billentyűzet Billentyűzet nem USA 0x0007 0x0032 0x002B 42
Billentyűzet/numerikus billentyűzet Billentyűzet pontosvesszője és kettőspont 0x0007 0x0033 0x0027 40
Billentyűzet/kiosztó billentyűzet Billentyűzet aposztróf és dupla idézőjel 0x0007 0x0034 0x0028 41
Billentyűzet/Nyomógomb Billentyűzet Grave Accent és Tilde 0x0007 0x0035 0x0029 1
Billentyűzet/számbillentyűzet Billentyűzet vesszője 0x0007 0x0036 0x0033 53
Billentyűzet/numerikus billentyűzet Billentyűzet időszaka 0x0007 0x0037 0x0034 54
Billentyűzet/billentyűzet-panel Kérdőjel billentyű 0x0007 0x0038 0x0035 55
Billentyűzet/numerikus billentyűzet Billentyűzetsapka zárolása 0x0007 0x0039 0x003A 30
Billentyűzet/billentyűzeten Billentyűzet F1 0x0007 0x003A 0x003B 112
Billentyűzet/billentyűzet Billentyűzet F2 0x0007 0x003B 0x003C 113
Billentyűzet/numerikus billentyűzet Billentyűzet F3 0x0007 0x003C 0x003D 114
Billentyűzet/numerikus billentyűzet Billentyűzet F4 0x0007 0x003D 0x003E 115
Billentyűzet/billentyűzet Billentyűzet F5 0x0007 0x003E 0x003F 116
Billentyűzet/billentyűzet vagy numerikus billentyűzet Billentyűzet F6 0x0007 0x003F 0x0040 117
Billentyűzet/billentyűzet Billentyűzet F7 0x0007 0x0040 0x0041 118
Billentyűzet/billentyűblokk Billentyűzet F8 0x0007 0x0041 0x0042 119
Billentyűzet/billentyűzet Billentyűzet F9 0x0007 0x0042 0x0043 120
Billentyűzet/billentyűtábla Billentyűzet F10 0x0007 0x0043 0x0044 121
Billentyűzet/billentyűzet mező Billentyűzet F11 0x0007 0x0044 0x0057 122
Billentyűzet/numerikus billentyűzet Billentyűzet F12 0x0007 0x0045 0x0058 123
Billentyűzet/Numerikus billentyűzet Billentyűzetnyomtatási képernyő 0x0007 0x0046 0xE037
0x0054 *1. megjegyzés
124
Billentyűzet/numerikus billentyűzet Billentyűzet görgetési zárolása 0x0007 0x0047 0x0046 125
Billentyűzet/numerikus billentyűzet Billentyűzet szünet 0x0007 0x0048 0xE11D45
0xE046 *Megjegyzés 2
0x0045 *3. megjegyzés
126
Billentyűzet/számikonok Billentyűzet beszúrása 0x0007 0x0049 0xE052 75
Billentyűzet/billentyűzet Billentyűzet kezdőlapja 0x0007 0x004A 0xE047 80
Billentyűzet/gombsor Billentyűzet Page Up 0x0007 0x004B 0xE049 85
Billentyűzet/Numerikus billentyűzet Billentyűzet – Előre törlés 0x0007 0x004C 0xE053 76
Billentyűzet/billenytűzet vagy billentyűzet/numerikus billentyűzet Billentyűzet vége 0x0007 0x004D 0xE04F 81
Billentyűzet/billentyűzet Billentyűzet Lapozás lefelé 0x0007 0x004E 0xE051 86
Billentyűzet/numerikus billentyűzet Billentyűzet RightArrow 0x0007 0x004F 0xE04D 89
Billentyűzet/Keypad Billentyűzet balra mutató nyíl 0x0007 0x0050 0xE04B 79
Billentyűzet/Numerikus billentyűzet Billentyűzet le nyíl 0x0007 0x0051 0xE050 84
Billentyűzet/billentyűzet Billentyűzet UpArrow 0x0007 0x0052 0xE048 83
Billentyűzet/numerikus billentyűzet Billentyűzet számzárolása és törlése 0x0007 0x0053 0x0045
0xE045 *3. megjegyzés
90
Billentyűzet/billentyűzet Billentyűpárnán előre perjel 0x0007 0x0054 0xE035 95
Billentyűzet/numerikus billentyűzet Billentyűzet csillag 0x0007 0x0055 0x0037 100
Billentyűzet/billentyűzet rész Billentyűzet kötőjele 0x0007 0x0056 0x004A 105
Billentyűzet/billentyűzet rész Billentyűzet plusz 0x0007 0x0057 0x004E 106
Billentyűzet/billentyűzet-modul Billentyűzet ENTER 0x0007 0x0058 0xE01C 108
Billentyűzet/billentyűzet Billentyűzet 1 és Vége 0x0007 0x0059 0x004F 93
Billentyűzet/numerikus billentyűzet Billentyűzet 2 és Le nyíl 0x0007 0x005A 0x0050 98
Billentyűzet/billentyűzet részegység Billentyűzet 3 és PageDn 0x0007 0x005B 0x0051 103
Billentyűzet/billentyűzet vagy numerikus billentyűzet Billentyűzet 4 és Balra nyíl 0x0007 0x005C 0x004B 92
Billentyűzet/billentyűzet Billentyűzet 5 0x0007 0x005D 0x004C 97
Billentyűzet/billentyűzet_vezérlőmodul Billentyűzet 6 és Jobbra nyíl 0x0007 0x005E 0x004D 102
Billentyűzet/számgombok Keypad 7 és Home 0x0007 0x005F 0x0047 91
Billentyűzet/számgombok Billentyű 8 és Fel nyíl 0x0007 0x0060 0x0048 96
Billentyűzet/billentyűzet-háttér Billentyűzet 9 és PageUp 0x0007 0x0061 0x0049 101
Billentyűzet/billentyűzet Billentyűzet 0 és Beszúrás 0x0007 0x0062 0x0052 99
Billentyűzet/billentyűzet rész Billentyűzet időszaka 0x0007 0x0063 0x0053 104
Billentyűzet/Numerikus billentyűzet Nem amerikai billentyűzet perjelsávja 0x0007 0x0064 0x0056 45
Billentyűzet/billentyűzetkiosztás Billentyűzetalkalmazás 0x0007 0x0065 0xE05D 129
Billentyűzet/kisebb billentyűzet Billentyűzet tápellátása 0x0007 0x0066 0xE05E
Billentyűzet/numerikus billentyűzet A billentyűzet egyenlő 0x0007 0x0067 0x0059
Billentyűzet/billentyűzet Billentyűzet F13 0x0007 0x0068 0x0064
Billentyűzet/billentyűzet Billentyűzet F14 0x0007 0x0069 0x0065
Billentyűzet/numerikus billentyűzet Billentyűzet F15 0x0007 0x006A 0x0066
Billentyűzet/billentyűzet Billentyűzet F16 0x0007 0x006B 0x0067
Billentyűzet/billentyűzet Billentyűzet F17 0x0007 0x006C 0x0068
Billentyűzet/billentyűzet Billentyűzet F18 0x0007 0x006D 0x0069
Billentyűzet/billentyűzet-párna Billentyűzet F19 0x0007 0x006E 0x006A
Billentyűzet/billentyűzet Billentyűzet F20 0x0007 0x006F 0x006B
Billentyűzet/billentyűzettömb Billentyűzet F21 0x0007 0x0070 0x006C
Billentyűzet/számgombok Billentyűzet F22 0x0007 0x0071 0x006D
Billentyűzet/billentyűzet Billentyűzet F23 0x0007 0x0072 0x006E
Billentyűzet/számbillentyűzet Billentyűzet F24 0x0007 0x0073 0x0076
Billentyűzet/billentyűzet Billentyűzet vesszője 0x0007 0x0085 0x007E 107 *4. megjegyzés
Billentyűzet/numerikus billentyűzet Nemzetközi billentyűzet1 0x0007 0x0087 0x0073 56 *4., 5. megjegyzés
Billentyűzet/billentyűzethez tartozó pad Keyboard International2 0x0007 0x0088 0x0070 133 *5. megjegyzés
Billentyűzet/numerikus billentyűzet International3 billentyűzet 0x0007 0x0089 0x007D 14 *5. megjegyzés
Billentyűzet/billentyűzet-kiegészítő Keyboard International4 0x0007 0x008A 0x0079 132 *5. megjegyzés
Billentyűzet/billentyű Keyboard International5 0x0007 0x008B 0x007B 131 *5. megjegyzés
Billentyűzet/numerikus billentyűzet Keyboard International6 0x0007 0x008C 0x005C
Billentyűzet/Billentyűzet-mátrix Billentyűzet LANG1 0x0007 0x0090 0x0072 *6. megjegyzés
0x00F2 *3. Megjegyzés, 6.
Billentyűzet/numerikus billentyűzet Billentyűzet LANG2 0x0007 0x0091 0x0071 *6. megjegyzés
0x00F1 *3. megjegyzés, 6. megjegyzés
Billentyűzet/kezelőpult Billentyűzet LANG3 0x0007 0x0092 0x0078
Billentyűzet/numerikus billentyűzet Billentyűzet LANG4 0x0007 0x0093 0x0077
Billentyűzet/billentyűzet Billentyűzet LANG5 0x0007 0x0094 0x0076
Billentyűzet/numerikus billentyűzet Billentyűzet LeftControl 0x0007 0x00E0 0x001D 58
Billentyűzet/billentyűzet Bal oldali billentyűzet 0x0007 0x00E1 0x002A 44
Billentyűzet/billentyűzet vagy numerikus billentyűzet Bal Alt billentyű 0x0007 0x00E2 0x0038 60
Billentyűzet/billentyűcsoport Billentyűzet bal oldali grafikus felülete 0x0007 0x00E3 0xE05B 127
Billentyűzet/billentyűzetkiosztás Billentyűzet RightControl 0x0007 0x00E4 0xE01D 64
Billentyűzet/billenytűzettábla Billentyűzet jobb oldali eltolódása 0x0007 0x00E5 0x0036 57
Billentyűzet/billentyűzet Billentyűzet jobb Alt 0x0007 0x00E6 0xE038 62
Billentyűzet/numerikus billentyűzet Billentyűzet jobb grafikus felülete 0x0007 0x00E7 0xE05C 128
Fogyasztó Következő szám beolvasása 0x000C 0x00B5 0xE019
Fogyasztó Előző szám áttekerése 0x000C 0x00B6 0xE010
Fogyasztó Állj 0x000C 0x00B7 0xE024
Fogyasztó Lejátszás/szüneteltetés 0x000C 0x00CD 0xE022
Fogyasztó Néma 0x000C 0x00E2 0xE020
Fogyasztó Mennyiségi növekmény 0x000C 0x00E9 0xE030
Fogyasztó Térfogatcsökkentés 0x000C 0x00EA 0xE02E
Fogyasztó AL Fogyasztói Vezérlés Konfigurációja 0x000C 0x0183 0xE06D
Fogyasztó AL e-mail olvasó 0x000C 0x018A 0xE06C
Fogyasztó AL-kalkulátor 0x000C 0x0192 0xE021
Fogyasztó AL Local Machine Browser 0x000C 0x0194 0xE06B
Fogyasztó AC keresés 0x000C 0x0221 0xE065
Fogyasztó AC kezdőlapja 0x000C 0x0223 0xE032
Fogyasztó Légkondicionálás visszaállítása 0x000C 0x0224 0xE06A
Fogyasztó AC továbbítása 0x000C 0x0225 0xE069
Fogyasztó AC leállítása 0x000C 0x0226 0xE068
Fogyasztó Klímafrissítés 0x000C 0x0227 0xE067
Fogyasztó AC könyvjelzők 0x000C 0x022A 0xE066

Megjegyzések:

  1. SysRq billentyű beolvasási kódja kibocsátásra kerül Alt+Print Screen billentyűkombinációval
  2. Break kulcs szkennelési kód megjelenik Control+Pause billentyűleütéskor
  3. Ahogy a régi billentyűzet-üzenetekben látható
  4. A kulcs brazil billentyűzeteken van jelen
  5. A kulcs japán billentyűzeteken van jelen
  6. A vizsgálati kód csak a kulcskiadási eseményben lesz kibocsátva

Extended-Key jelző

A kiterjesztett billentyű jelölő azt jelzi, hogy a billentyűleütési üzenet a bővített 101/102 billentyűs billentyűzet egyik további kulcsából származik-e. A kiterjesztett billentyűk közé tartoznak a billentyűzet jobb oldalán található ALT és CTRL billentyűk; az INS, DEL, HOME, END, PAGE UP, PAGE DOWN és a nyílbillentyűk, amelyek a numerikus billentyűzet bal oldalán lévő csoportokban vannak; a NUM LOCK billentyű; a BREAK (CTRL+PAUSE) billentyű; a PRINT SCRN billentyű; valamint az osztás (/) és az ENTER billentyűk a numerikus billentyűzeten. A jobb oldali SHIFT-kulcs nem tekinthető kiterjesztett kulcsnak, hanem külön vizsgálati kóddal rendelkezik.

Ha meg van adva, a vizsgálati kód két bájtból álló sorozatból áll, ahol az első bájt értéke 0xE0.

Kontextus kód

A környezeti kód azt jelzi, hogy az ALT billentyű le volt-e állítva a billentyűleütési üzenet létrehozásakor. A kód 1, ha az ALT billentyű le volt állítva, és 0, ha fel lett állítva.

Előző Key-State jelző

Az előző kulcsállapot-jelző azt jelzi, hogy a billentyűleütést létrehozó kulcs korábban felfelé vagy lefelé volt-e állítva. Ez 1, ha a kulcs korábban le volt állítva, és 0, ha a kulcs korábban fel volt állítva. Ezzel a jelzővel azonosíthatja a billentyűzet automatikus ismétlési funkciója által generált billentyűleütési üzeneteket. Ez a jelző 1 értékre van állítva az automatikus ismétlési funkció által létrehozott WM_KEYDOWN és WM_SYSKEYDOWN billentyűleütési üzenetekhez. Mindig 1 értékre van állítva WM_KEYUP és WM_SYSKEYUP üzenetekhez.

Transition-State zászló

Az áttűnési állapot jelző azt jelzi, hogy egy kulcs lenyomása vagy egy kulcs felszabadítása generálta-e a billentyűleütési üzenetet. Ez a jelző mindig 0 értékre van állítva WM_KEYDOWN és WM_SYSKEYDOWN üzenetek esetében; mindig 1 értékre van állítva WM_KEYUP és WM_SYSKEYUP üzenetekhez.

Karakterüzenetek

A billentyűleütési üzenetek sok információt nyújtanak a billentyűleütésekről, de nem tartalmaznak karakterkódokat a karakterleütésekhez. A karakterkódok lekéréséhez az alkalmazásnak tartalmaznia kell a TranslateMessage függvényt a szálüzenet ciklusában. TranslateMessageWM_KEYDOWN vagy WM_SYSKEYDOWN üzenetet továbbít a billentyűzetkiosztásnak. Az elrendezés megvizsgálja az üzenet virtuális kulcskódját, és ha az egy karakter billentyűnek felel meg, megadja a karakterkód megfelelőjét, figyelembe véve a SHIFT és a CAPS LOCK billentyűk állapotát. Ezután létrehoz egy karakterüzenetet, amely tartalmazza a karakterkódot, és az üzenetet az üzenetsor tetején helyezi el. Az üzenethurok következő iterációja eltávolítja a karakterüzenetet az üzenetsorból, és elküldi az üzenetet a megfelelő ablakos eljárásnak.

Ez a szakasz a következő témaköröket ismerteti:

Nem rendszerszintű karakterüzenetek

Az ablakos eljárás a következő karakterüzeneteket fogadhatja: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHARés WM_UNICHAR. A TranslateMessage függvény WM_CHAR vagy WM_DEADCHAR üzenetet hoz létre, amikor feldolgoz egy WM_KEYDOWN üzenetet. Hasonlóképpen létrehoz egy WM_SYSCHAR vagy WM_SYSDEADCHAR üzenetet, amikor egy WM_SYSKEYDOWN üzenetet dolgoz fel.

A billentyűzetbemenetet feldolgozó alkalmazások általában figyelmen kívül hagyják a WM_CHAR és WM_UNICHAR üzeneteket, és minden más üzenetet átadnak a DefWindowProc függvénynek. Vegye figyelembe, hogy WM_CHAR UTF-16 (16 bites Unicode-átalakítási formátum) vagy ANSI-karakterkészletet használ, míg WM_UNICHAR mindig UTF-32 -t (32 bites Unicode-átalakítási formátumot) használ. A rendszer a WM_SYSCHAR és WM_SYSDEADCHAR üzeneteket használja a menümnemonics implementálásához.

A wParam paraméter az összes karakterüzenetben tartalmazza a lenyomott karakterkulcs karakterkódját. A karakterkód értéke az üzenetet fogadó ablak ablakosztályától függ. Ha a RegisterClass függvény Unicode-verzióját használták az ablakosztály regisztrálásához, a rendszer Unicode-karaktereket biztosít az osztály összes ablakához. Ellenkező esetben a rendszer ANSI-karakterkódokat biztosít. További információ: Ablakosztályok regisztrálása és UTF-8 kódlapok használata Windows-alkalmazásokban.

A karakterüzenet lParam paraméterének tartalma megegyezik a kulcs lenyomás üzenet (lParam) azon paraméterének tartalmával, amelyből a karakterüzenet származtatva lett. További információ: billentyűleütési üzenetjelölők.

Dead-Character üzenetek

Egyes nem angol billentyűzetek olyan karakterbillentyűket tartalmaznak, amelyektől nem várható, hogy maguktól karaktereket termeljenek. Ehelyett arra szolgálnak, hogy egy diakritikus jelet adjanak a későbbi billentyűleütés által létrehozott karakterhez. Ezeket a kulcsokat halott kulcsoknak nevezzük. A német billentyűzeten a circumflex billentyű egy halott kulcs példája. Ha egy német felhasználó egy "o" betűt akar beírni circumflex ékezettel, akkor előbb az ékezet billentyűt, majd az "o" billentyűt gépeli be. A billentyűzetfókuszú ablak a következő üzenetsort kapja:

  1. WM_KEYDOWN
  2. WM_DEADCHAR
  3. WM_KEYUP
  4. WM_KEYDOWN
  5. WM_CHAR
  6. WM_KEYUP

TranslateMessage a WM_DEADCHAR üzenetet hozza létre, amikor a WM_KEYDOWN üzenetet egy halott kulccsal dolgozza fel. Bár a WM_DEADCHAR üzenet wParam paramétere tartalmazza a holt kulcshoz tartozó diakritikus karakterkódot, az alkalmazás általában figyelmen kívül hagyja az üzenetet. Ehelyett az azt követő billentyűleütés által létrehozott WM_CHAR üzenetet dolgozza fel. A WM_CHAR üzenet wParam paramétere tartalmazza a betű karakterkódját a diakritikussal. Ha az ezt követő billentyűleütés olyan karaktert hoz létre, amely nem kombinálható diakritikussal, a rendszer két WM_CHAR üzenetet generál. Az első wParam paramétere tartalmazza a diakritikus karakterkódját; a második wParam paramétere tartalmazza a következő karakterkulcs karakterkódját.

A TranslateMessage függvény akkor hozza létre a WM_SYSDEADCHAR üzenetet, amikor a rendszer halott kulcsából (az ALT kulccsal együtt lenyomott halott kulccsal) dolgozza fel a WM_SYSKEYDOWN üzenetet. Az alkalmazások általában figyelmen kívül hagyják a WM_SYSDEADCHAR üzenetet.

Kulcs állapota

A billentyűzetüzenetek feldolgozása során előfordulhat, hogy az alkalmazásnak az aktuális üzenetet létrehozó mellett egy másik kulcs állapotát is meg kell határoznia. Például egy szövegszerkesztő alkalmazásnak, amely lehetővé teszi, hogy a felhasználó a SHIFT+END billentyűkombinációt lenyomva jelöljön ki egy szövegblokkot, ellenőriznie kell a SHIFT billentyű állapotát, amikor billentyűleütési üzenetet kap a END billentyűről. Az alkalmazás a GetKeyState függvénnyel meghatározhatja egy virtuális kulcs állapotát az aktuális üzenet létrehozásakor; a GetAsyncKeyState függvénnyel lekérheti egy virtuális kulcs aktuális állapotát.

A billentyűzetkiosztás megőrzi a nevek listáját. Az egyetlen karaktert előállító kulcs neve megegyezik a kulcs által előállított karakterrel. Az olyan nemcharacter kulcsok neve, mint a TAB és az ENTER, karaktersztringként van tárolva. Az alkalmazások a GetKeyNameText függvény meghívásával bármilyen kulcs nevét lekérhetik az eszközillesztőből.

Billentyűleütés és karakterfordítások

A rendszer számos speciális célú függvényt tartalmaz, amelyek a különböző billentyűleütési üzenetek által biztosított vizsgálati kódokat, karakterkódokat és virtuáliskulcs-kódokat fordítják le. Ezek a függvények a következők: MapVirtualKey, ToAscii, ToUnicodeés VkKeyScan.

Emellett a Microsoft Rich Edit 3.0 támogatja a HexToUnicode IME, amely lehetővé teszi, hogy a felhasználó gyorsbillentyűkkel konvertáljon hexadecimális és Unicode karakterek között. Ez azt jelenti, hogy amikor a Microsoft Rich Edit 3.0 be van építve egy alkalmazásba, az alkalmazás örökli a HexToUnicode IME funkcióit.

Hot-Key támogatás

A gyorsbillentyű egy olyan kulcskombináció, amely egy WM_HOTKEY üzenetet generál, egy üzenetet, amelyet a rendszer a szál üzenetsorának tetejére helyez, figyelmen kívül hagyva az üzenetsor meglévő üzeneteit. Az alkalmazások gyorsbillentyűkkel szereznek be magas prioritású billentyűzetbemenetet a felhasználótól. Ha például egy CTRL+C billentyűkombinációból álló gyorsbillentyűt határoz meg, az alkalmazás lehetővé teszi, hogy a felhasználó megszakítsa a hosszadalmas műveletet.

Egy gyorsbillentyű definiálásához egy alkalmazás meghívja a RegisterHotKey függvényt, megadva a WM_HOTKEY üzenetet létrehozó kulcsok kombinációját, az üzenet fogadásához használt ablak fogópontját és a gyorsbillentyű azonosítóját. Amikor a felhasználó lenyomja a gyorsbillentyűt, egy WM_HOTKEY üzenet kerül az ablakot létrehozó szál üzenetsorába. Az üzenet wParam paramétere tartalmazza a gyorsbillentyű azonosítóját. Az alkalmazás több gyorsbillentyűt is definiálhat egy szálhoz, de a szál minden gyorsbillentyűjének egyedi azonosítóval kell rendelkeznie. Az alkalmazás leállása előtt a UnregisterHotKey függvénnyel kell megsemmisítenie a gyorsbillentyűt.

Az alkalmazások gyorsbillentyű-vezérlővel megkönnyítik a felhasználó számára a gyorsbillentyű kiválasztását. A gyorsbillentyű-vezérlők általában egy ablakot aktiváló gyorsbillentyű meghatározására szolgálnak; nem használják a RegisterHotKey és UnregisterHotKey függvényt. Ehelyett egy gyorsbillentyű-vezérlőt használó alkalmazás általában a WM_SETHOTKEY üzenetet küldi a gyorsbillentyű beállításához. Amikor a felhasználó megnyomja a gyorsbillentyűt, a rendszer egy WM_SYSCOMMAND üzenetet küld, amely megadja a SC_HOTKEY. A gyorsbillentyű-vezérlőkkel kapcsolatos további információkért lásd a "Gyakori kulcsú vezérlők használata" című témakört gyorsbillentyű-vezérlők.

Billentyűzetbillentyűk böngészéshez és egyéb funkciókhoz

A Windows speciális billentyűkkel támogatja a billentyűzeteket a böngészőfunkciókhoz, a médiafunkciókhoz, az alkalmazások indításához és az energiagazdálkodáshoz. A WM_APPCOMMAND támogatja a további billentyűket. Emellett a ShellProc függvény is módosul, hogy támogassa a további billentyűzetbillentyűket.

Nem valószínű, hogy egy összetevőalkalmazás gyermekablaka közvetlenül implementálhat parancsokat ezekhez az extra billentyűzetbillentyűkhöz. A billentyűk egyikének lenyomásakor DefWindowProcWM_APPCOMMAND üzenetet küld egy ablakba. DefWindowProc a WM_APPCOMMAND üzenetet is továbbítja a szülőablaknak. Ez hasonló a helyi menük jobb egérgombbal való meghívásához, az pedig az, hogy DefWindowProc a jobb gombbal kattintva WM_CONTEXTMENU üzenetet küld, és továbbítja a szülőjének. Továbbá, ha DefWindowProc kap egy WM_APPCOMMAND üzenetet egy felső szintű ablakhoz, akkor egy HSHELL_APPCOMMANDkóddal rendelkező rendszerhéjhohogot fog hívni.

A Windows a Microsoft IntelliMouse Explorert is támogatja, amely egy öt gombot tartalmazó egér. A két további gomb támogatja a böngésző előre és hátra navigálását. További információkért lásd: XBUTTONs.

Bemenet szimulálása

A felhasználói bemeneti események folyamatos sorozatának szimulálásához használja a SendInput függvényt. A függvény három paramétert fogad el. Az első paraméter, cInputs, a szimulálni kívánt bemeneti események számát jelzi. A második paraméter, rgInputs, INPUT struktúrák tömbje, amelyek mindegyike egy bemeneti esemény típusát és az eseményre vonatkozó további információkat írja le. Az utolsó paraméter, cbSize, a INPUT struktúra méretét fogadja el bájtban.

A SendInput függvény úgy működik, hogy szimulált bemeneti események sorozatát injektálja az eszköz bemeneti adatfolyamába. Az effektus hasonló a keybd_event vagy mouse_event függvény ismételt meghívásához, azzal a kivétellel, hogy a rendszer gondoskodik arról, hogy a szimulált eseményekkel más bemeneti események ne következhessenek be. Amikor a hívás befejeződik, a visszatérési érték a sikeresen lejátszott bemeneti események számát jelzi. Ha ez az érték nulla, akkor a bemenet le lett tiltva.

A SendInput függvény nem állítja alaphelyzetbe a billentyűzet aktuális állapotát. Ezért ha a felhasználó a függvény meghívásakor lenyomja a kulcsokat, az megzavarhatja a függvény által generált eseményeket. Ha aggódik a lehetséges interferencia miatt, ellenőrizze a billentyűzet állapotát a GetAsyncKeyState függvénnyel, és szükség szerint javítsa ki.

Nyelvek, területi beállítások és billentyűzetkiosztások

A nyelv természetes nyelv, például angol, francia és japán. A alnyelvi egy adott földrajzi régióban beszélt természetes nyelv változata, például az Egyesült Királyságban és az Egyesült Államokban beszélt angol alnyelvek. Az alkalmazások nyelvazonosítóknevű értékeket használnak a nyelvek és alnyelvek egyedi azonosításához.

Az alkalmazások általában területi beállításokat használnak a bemenet és a kimenet feldolgozásának nyelvének beállításához. A billentyűzet területi beállításának beállítása például hatással van a billentyűzet által létrehozott karakterértékekre. A kijelző vagy nyomtató területi beállításának beállítása hatással van a megjelenített vagy kinyomtatott karakterjelekre. Az alkalmazások a billentyűzetkiosztások betöltésével és használatával állítják be a billentyűzet területi beállítását. Egy kijelző vagy nyomtató területi beállítását úgy állítják be, hogy kiválasztanak egy betűtípust, amely támogatja a megadott területi beállítást.

A billentyűzetkiosztás nemcsak a billentyűzeten lévő billentyűk fizikai helyzetét határozza meg, hanem a billentyűk lenyomásával létrehozott karakterértékeket is meghatározza. Minden elrendezés azonosítja az aktuális beviteli nyelvet, és meghatározza, hogy mely karakterértékek jönnek létre a kulcsok és kulcskombinációk alapján.

Minden billentyűzetkiosztáshoz tartozik egy megfelelő azonosító, amely azonosítja az elrendezést és a nyelvet. A fogantyú alacsony része egy nyelvi azonosító. A magas szó itt egy eszközkulcsra vagy hardverre utal, amely meghatározza a fizikai elrendezést, vagy nulla, amely az alapértelmezett fizikai elrendezést jelzi. A felhasználó bármilyen bemeneti nyelvet társíthat egy fizikai elrendezéshez. Például egy angolul beszélő felhasználó, aki nagyon ritkán dolgozik franciául, a billentyűzet beviteli nyelvét francia nyelvre állíthatja anélkül, hogy módosítaná a billentyűzet fizikai elrendezését. Ez azt jelenti, hogy a felhasználó a jól ismert angol elrendezés használatával franciául is beírhat szöveget.

Az alkalmazásoktól általában nem várható el, hogy közvetlenül manipulálják a bemeneti nyelveket. A felhasználó ehelyett nyelvi és elrendezési kombinációkat állít be, majd vált közöttük. Amikor a felhasználó egy másik nyelven megjelölt szövegre kattint, az alkalmazás meghívja a ActivateKeyboardLayout függvényt, hogy aktiválja a felhasználó alapértelmezett elrendezését az adott nyelvhez. Ha a felhasználó olyan nyelven szerkessze a szöveget, amely nem szerepel az aktív listában, az alkalmazás meghívhatja a LoadKeyboardLayout függvényt a nyelvvel az adott nyelv alapján történő elrendezés lekéréséhez.

Az ActivateKeyboardLayout függvény beállítja az aktuális feladat bemeneti nyelvét. A hkl paraméter lehet a billentyűzetkiosztás leírója vagy egy nullával kiterjesztett nyelvi azonosító. A billentyűzetkiosztási fogópontok a LoadKeyboardLayout vagy GetKeyboardLayoutList függvényből kérhetők le. A HKL_NEXT és HKL_PREV értékek a következő vagy az előző billentyűzet kiválasztására is használhatók.

A GetKeyboardLayoutName függvény lekéri a híváslánc aktív billentyűzetkiosztásának nevét. Ha egy alkalmazás az LoadKeyboardLayout függvénnyel hozza létre az aktív elrendezést, GetKeyboardLayoutName az elrendezés létrehozásához használt sztringet kéri le. Ellenkező esetben a sztring az aktív elrendezés területi beállításának megfelelő elsődleges nyelvi azonosító. Ez azt jelenti, hogy a függvény nem feltétlenül tesz különbséget az azonos elsődleges nyelvvel rendelkező különböző elrendezések között, ezért nem adhat vissza konkrét információkat a bemeneti nyelvről. A GetKeyboardLayout függvény azonban használható a bemeneti nyelv meghatározásához.

A LoadKeyboardLayout függvény betölti a billentyűzetkiosztást, és elérhetővé teszi az elrendezést a felhasználó számára. Az alkalmazások a KLF_ACTIVATE érték használatával azonnal aktívvá tehetik az elrendezést az aktuális szálhoz. Az alkalmazások a KLF_REORDER értékkel átrendezhetik az elrendezéseket anélkül, hogy megadják a KLF_ACTIVATE értéket. Az alkalmazásoknak mindig a KLF_SUBSTITUTE_OK értéket kell használniuk a billentyűzetkiosztások betöltésekor annak érdekében, hogy a felhasználói beállítás, ha van, legyen kiválasztva.

A többnyelvű támogatás érdekében a LoadKeyboardLayout függvény biztosítja a KLF_REPLACELANG és KLF_NOTELLSHELL jelzőket. A KLF_REPLACELANG jelölő a meglévő billentyűzetkiosztás nyelvének módosítása nélküli cseréjére irányítja a függvényt. Hiba, ha egy meglévő elrendezést ugyanazzal a nyelvi azonosítóval próbál lecserélni, de a KLF_REPLACELANG megadása nélkül. A KLF_NOTELLSHELL jelző megakadályozza, hogy a függvény értesítse a shellt, ha hozzáadnak vagy lecserélnek egy billentyűzetkiosztást. Ez olyan alkalmazások esetében hasznos, amelyek egymást követő hívássorozatokban több elrendezést adnak hozzá. Ezt a jelölőt csak az utolsó hívásban használhatja.

A UnloadKeyboardLayout függvény korlátozott, mert nem tudja eltávolítani a rendszer alapértelmezett bemeneti nyelvét. Ez biztosítja, hogy a felhasználónak mindig legyen egy billentyűzetkiosztása, amelyet szövegbevitelre használhat, ugyanazt a karakterkészletet alkalmazva, mint amelyet a rendszerhéj és a fájlrendszer használ.