Megosztás:


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. Ez azt jelzi, hogy a felhasználó nem fogja tudni elérni az ablak menüit vagy a Rendszer menüt, vagy az Alt+Esc vagy Alt+Tab billentyűkombinációt 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. Rendszerbillentyűzet-üzenetek jönnek létre, amikor a felhasználó egy billentyűt a Alt billentyűvel együtt gépel be, 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ált). 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
Általános asztali felület Rendszer alvó üzemmód 0x0001 0x0082 0xE05F
Általános asztali felület Rendszer felébresztése 0x0001 0x0083 0xE063
Billentyűzet/billentyűzetpanel ErrorRollOver 0x0007 0x0001 0x00FF
Billentyűzet/billentyűzetpanel Billentyűzet A 0x0007 0x0004 0x001E 31
Billentyűzet/billentyűzetpanel B billentyűzet 0x0007 0x0005 0x0030 50
Billentyűzet/billentyűzetpanel C billentyűzet 0x0007 0x0006 0x002E 48
Billentyűzet/billentyűzetpanel D billentyű 0x0007 0x0007 0x0020 33
Billentyűzet/billentyűzetpanel E billentyűzet 0x0007 0x0008 0x0012 19
Billentyűzet/billentyűzetpanel Billentyűzet F 0x0007 0x0009 0x0021 34
Billentyűzet/billentyűzetpanel G billentyűzet 0x0007 0x000A 0x0022 35
Billentyűzet/billentyűzetpanel Billentyűzet H 0x0007 0x000B 0x0023 36
Billentyűzet/billentyűzetpanel I. billentyűzet 0x0007 0x000C 0x0017 24
Billentyűzet/billentyűzetpanel Billentyűzet J 0x0007 0x000D 0x0024 37
Billentyűzet/billentyűzetpanel K billentyűzet 0x0007 0x000E 0x0025 38
Billentyűzet/billentyűzetpanel Billentyűzet L 0x0007 0x000F 0x0026 39
Billentyűzet/billentyűzetpanel Billentyűzet M 0x0007 0x0010 0x0032 52
Billentyűzet/billentyűzetpanel Billentyűzet N 0x0007 0x0011 0x0031 51
Billentyűzet/billentyűzetpanel Billentyűzet O 0x0007 0x0012 0x0018 25
Billentyűzet/billentyűzetpanel P billentyűzet 0x0007 0x0013 0x0019 26
Billentyűzet/billentyűzetpanel Billentyűzet Q 0x0007 0x0014 0x0010 17
Billentyűzet/billentyűzetpanel Billentyűzet R 0x0007 0x0015 0x0013 20
Billentyűzet/billentyűzetpanel Billentyűzet S 0x0007 0x0016 0x001F 32
Billentyűzet/billentyűzetpanel T billentyűzet 0x0007 0x0017 0x0014 21
Billentyűzet/billentyűzetpanel U billentyűzet 0x0007 0x0018 0x0016 23
Billentyűzet/billentyűzetpanel Billentyűzet V 0x0007 0x0019 0x002F 49
Billentyűzet/billentyűzetpanel Billentyűzet W 0x0007 0x001A 0x0011 18
Billentyűzet/billentyűzetpanel X billentyűzet 0x0007 0x001B 0x002D 47
Billentyűzet/billentyűzetpanel Billentyűzet Y 0x0007 0x001C 0x0015 22
Billentyűzet/billentyűzetpanel Z billentyűzet 0x0007 0x001D 0x002C 46
Billentyűzet/billentyűzetpanel Billentyűzet 1 és Bang 0x0007 0x001E 0x0002 2
Billentyűzet/billentyűzetpanel Billentyűzet 2 és At 0x0007 0x001F 0x0003 3
Billentyűzet/billentyűzetpanel 3. billentyűzet és kivonat 0x0007 0x0020 0x0004 4
Billentyűzet/billentyűzetpanel 4. billentyűzet és dollár 0x0007 0x0021 0x0005 5
Billentyűzet/billentyűzetpanel Billentyűzet 5 és százalék 0x0007 0x0022 0x0006 6
Billentyűzet/billentyűzetpanel Billentyűzet 6 és Caret 0x0007 0x0023 0x0007 7
Billentyűzet/billentyűzetpanel Billentyűzet 7 és Ampersand 0x0007 0x0024 0x0008 8
Billentyűzet/billentyűzetpanel 8. billentyűzet és csillag 0x0007 0x0025 0x0009 9
Billentyűzet/billentyűzetpanel 9-es billentyű és bal szögletes zárójel 0x0007 0x0026 0x000A 10
Billentyűzet/billentyűzetpanel 0 billentyű és jobb zárójel 0x0007 0x0027 0x000B 11
Billentyűzet/billentyűzetpanel Billentyűzet visszatérési enter 0x0007 0x0028 0x001C 43
Billentyűzet/billentyűzetpanel Billentyűkioldó 0x0007 0x0029 0x0001 110
Billentyűzet/billentyűzetpanel Billentyűzet törlése 0x0007 0x002A 0x000E 15
Billentyűzet/billentyűzetpanel Billentyűzet Tabulátor 0x0007 0x002B 0x000F 16
Billentyűzet/billentyűzetpanel Billentyűzet szóköze 0x0007 0x002C 0x0039 61
Billentyűzet/billentyűzetpanel Billentyűzet kötőjel és aláhúzásjel jelei 0x0007 0x002D 0x000C 12
Billentyűzet/billentyűzetpanel Billentyűzet egyenlő és plusz 0x0007 0x002E 0x000D 13
Billentyűzet/billentyűzetpanel Billentyűzet bal oldali zárójele 0x0007 0x002F 0x001A 27
Billentyűzet/billentyűzetpanel Billentyűzet jobb oldali zárójele 0x0007 0x0030 0x001B 28
Billentyűzet/billentyűzetpanel Billentyűzet fordított perjele és pipa 0x0007 0x0031 0x002B 29
Billentyűzet/billentyűzetpanel Billentyűzet nem USA kivonat és Tilde 0x0007 0x0032 0x002B 42
Billentyűzet/billentyűzetpanel Pontosvessző és kettőspont billentyűje 0x0007 0x0033 0x0027 40
Billentyűzet/billentyűzetpanel Aposztróf és dupla idézőjel a billentyűzeten 0x0007 0x0034 0x0028 41
Billentyűzet/billentyűzetpanel Billentyűzet Grave Accent és Tilde 0x0007 0x0035 0x0029 1
Billentyűzet/billentyűzetpanel Billentyűzet vessző és LessThan 0x0007 0x0036 0x0033 53
Billentyűzet/billentyűzetpanel Billentyűzet időszaka és GreaterThan 0x0007 0x0037 0x0034 54
Billentyűzet/billentyűzetpanel Billentyűzet ForwardSlash és QuestionMark 0x0007 0x0038 0x0035 55
Billentyűzet/billentyűzetpanel Billentyűzetsapka zárolása 0x0007 0x0039 0x003A 30
Billentyűzet/billentyűzetpanel Billentyűzet F1 0x0007 0x003A 0x003B 112
Billentyűzet/billentyűzetpanel Billentyűzet F2 0x0007 0x003B 0x003C 113
Billentyűzet/billentyűzetpanel Billentyűzet F3 0x0007 0x003C 0x003D 114
Billentyűzet/billentyűzetpanel Billentyűzet F4 0x0007 0x003D 0x003E 115
Billentyűzet/billentyűzetpanel Billentyűzet F5 0x0007 0x003E 0x003F 116
Billentyűzet/billentyűzetpanel Billentyűzet F6 0x0007 0x003F 0x0040 117
Billentyűzet/billentyűzetpanel Billentyűzet F7 0x0007 0x0040 0x0041 118
Billentyűzet/billentyűzetpanel Billentyűzet F8 0x0007 0x0041 0x0042 119
Billentyűzet/billentyűzetpanel Billentyűzet F9 0x0007 0x0042 0x0043 Százhúsz
Billentyűzet/billentyűzetpanel Billentyűzet F10 0x0007 0x0043 0x0044 121
Billentyűzet/billentyűzetpanel Billentyűzet F11 0x0007 0x0044 0x0057 122
Billentyűzet/billentyűzetpanel Billentyűzet F12 0x0007 0x0045 0x0058 123
Billentyűzet/billentyűzetpanel Billentyűzetnyomtatási képernyő 0x0007 0x0046 0xE037
0x0054 *Megjegyzés 1
124
Billentyűzet/billentyűzetpanel Billentyűzet görgetési zárolása 0x0007 0x0047 0x0046 125
Billentyűzet/billentyűzetpanel Billentyűzet szünet 0x0007 0x0048 0xE11D45
0xE046 *Megjegyzés 2
0x0045 *3. megjegyzés
126
Billentyűzet/billentyűzetpanel Billentyűzet beszúrása 0x0007 0x0049 0xE052 75
Billentyűzet/billentyűzetpanel Billentyűzet kezdőlapja 0x0007 0x004A 0xE047 80
Billentyűzet/billentyűzetpanel Billentyűzet Page Up 0x0007 0x004B 0xE049 85
Billentyűzet/billentyűzetpanel Billentyűzet – Előre törlés 0x0007 0x004C 0xE053 76
Billentyűzet/billentyűzetpanel Billentyűzet vége 0x0007 0x004D 0xE04F 81
Billentyűzet/billentyűzetpanel Billentyűzet Lapozás lefelé 0x0007 0x004E 0xE051 86
Billentyűzet/billentyűzetpanel Billentyűzet Jobbnyíl 0x0007 0x004F 0xE04D 89
Billentyűzet/billentyűzetpanel Billentyűzet balra mutató nyíl 0x0007 0x0050 0xE04B 79
Billentyűzet/billentyűzetpanel Billentyűzet le nyíl 0x0007 0x0051 0xE050 84
Billentyűzet/billentyűzetpanel Billentyűzet UpArrow 0x0007 0x0052 0xE048 83
Billentyűzet/billentyűzetpanel Billentyűzet Num Lock és törlés 0x0007 0x0053 0x0045
0xE045 *Megjegyzés 3
90
Billentyűzet/billentyűzetpanel Billentyűpárnán előre perjel 0x0007 0x0054 0xE035 95
Billentyűzet/billentyűzetpanel Billentyűzet csillag 0x0007 0x0055 0x0037 100
Billentyűzet/billentyűzetpanel Billentyűzet kötőjele 0x0007 0x0056 0x004A 105
Billentyűzet/billentyűzetpanel Billentyűzet plusz 0x0007 0x0057 0x004E 106
Billentyűzet/billentyűzetpanel Billentyűzet ENTER 0x0007 0x0058 0xE01C 108
Billentyűzet/billentyűzetpanel Billentyűzet 1 és Vége 0x0007 0x0059 0x004F 93
Billentyűzet/billentyűzetpanel Billentyűzet 2 és Le nyíl billentyű 0x0007 0x005A 0x0050 98
Billentyűzet/billentyűzetpanel Billentyűzet 3 és PageDn 0x0007 0x005B 0x0051 103
Billentyűzet/billentyűzetpanel Billentyűzet 4 és Balra nyíl 0x0007 0x005C 0x004B 92
Billentyűzet/billentyűzetpanel Billentyűzet 5 0x0007 0x005D 0x004C 97
Billentyűzet/billentyűzetpanel Numerikus billentyűzet 6 és Jobbra mutató nyíl 0x0007 0x005E 0x004D 102
Billentyűzet/billentyűzetpanel Keypad 7 és Home 0x0007 0x005F 0x0047 91
Billentyűzet/billentyűzetpanel Billentyű 8 és Fel nyíl 0x0007 0x0060 0x0048 96
Billentyűzet/billentyűzetpanel Billentyűzet 9 és PageUp 0x0007 0x0061 0x0049 101
Billentyűzet/billentyűzetpanel Billentyű 0 és Beszúrás 0x0007 0x0062 0x0052 99
Billentyűzet/billentyűzetpanel Billentyűzet időszaka és törlése 0x0007 0x0063 0x0053 104
Billentyűzet/billentyűzetpanel Billentyűzet nem usa-beli fordított perjel és pipa 0x0007 0x0064 0x0056 45
Billentyűzet/billentyűzetpanel Billentyűzetalkalmazás 0x0007 0x0065 0xE05D 129
Billentyűzet/billentyűzetpanel Billentyűzet tápellátása 0x0007 0x0066 0xE05E
Billentyűzet/billentyűzetpanel A billentyűzet egyenlő 0x0007 0x0067 0x0059
Billentyűzet/billentyűzetpanel Billentyűzet F13 0x0007 0x0068 0x0064
Billentyűzet/billentyűzetpanel Billentyűzet F14 0x0007 0x0069 0x0065
Billentyűzet/billentyűzetpanel Billentyűzet F15 0x0007 0x006A 0x0066
Billentyűzet/billentyűzetpanel Billentyűzet F16 0x0007 0x006B 0x0067
Billentyűzet/billentyűzetpanel Billentyűzet F17 0x0007 0x006C 0x0068
Billentyűzet/billentyűzetpanel Billentyűzet F18 0x0007 0x006D 0x0069
Billentyűzet/billentyűzetpanel Billentyűzet F19 0x0007 0x006E 0x006A
Billentyűzet/billentyűzetpanel Billentyűzet F20 0x0007 0x006F 0x006B
Billentyűzet/billentyűzetpanel Billentyűzet F21 0x0007 0x0070 0x006C
Billentyűzet/billentyűzetpanel Billentyűzet F22 0x0007 0x0071 0x006D
Billentyűzet/billentyűzetpanel Billentyűzet F23 0x0007 0x0072 0x006E
Billentyűzet/billentyűzetpanel Billentyűzet F24 0x0007 0x0073 0x0076
Billentyűzet/billentyűzetpanel Billentyűzet vessző gomb 0x0007 0x0085 0x007E 107 *4. megjegyzés
Billentyűzet/billentyűzetpanel Keyboard International1 0x0007 0x0087 0x0073 56 *4., 5. megjegyzés
Billentyűzet/billentyűzetpanel Billentyűzet International2 0x0007 0x0088 0x0070 133 *5. megjegyzés
Billentyűzet/billentyűzetpanel International3 billentyűzet 0x0007 0x0089 0x007D 14 *5. megjegyzés
Billentyűzet/billentyűzetpanel Keyboard International4 0x0007 0x008A 0x0079 132 *5. megjegyzés
Billentyűzet/billentyűzetpanel Nemzetközi billentyűzet5 0x0007 0x008B 0x007B 131 *5. megjegyzés
Billentyűzet/billentyűzetpanel Nemzetközi billentyűzet6 0x0007 0x008C 0x005C
Billentyűzet/billentyűzetpanel Billentyűzet LANG1 0x0007 0x0090 0x0072 *6. megjegyzés
0x00F2 *3. Megjegyzés, 6.
Billentyűzet/billentyűzetpanel Billentyűzet LANG2 0x0007 0x0091 0x0071 *Megjegyzés 6
0x00F1 *3., 6. megjegyzés
Billentyűzet/billentyűzetpanel Billentyűzet LANG3 0x0007 0x0092 0x0078
Billentyűzet/billentyűzetpanel Billentyűzet LANG4 0x0007 0x0093 0x0077
Billentyűzet/billentyűzetpanel Billentyűzet LANG5 0x0007 0x0094 0x0076
Billentyűzet/billentyűzetpanel Billentyűzet LeftControl 0x0007 0x00E0 0x001D 58
Billentyűzet/billentyűzetpanel Bal oldali billentyűzet 0x0007 0x00E1 0x002A 44
Billentyűzet/billentyűzetpanel Bal Alt billentyű 0x0007 0x00E2 0x0038 60
Billentyűzet/billentyűzetpanel Billentyűzet bal oldali grafikus felülete 0x0007 0x00E3 0xE05B 127
Billentyűzet/billentyűzetpanel Billentyűzet RightControl 0x0007 0x00E4 0xE01D 64
Billentyűzet/billentyűzetpanel Billentyűzet jobb oldali eltolódása 0x0007 0x00E5 0x0036 57
Billentyűzet/billentyűzetpanel Billentyűzet jobb Alt 0x0007 0x00E6 0xE038 62
Billentyűzet/billentyűzetpanel Billentyűzet jobb GUI gombja 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 Helyi Gép Böngésző 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 Előre 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. Keystroke kód kerül kibocsátásra a Ctrl+Pause billentyűleütéssel
  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

Kiterjesztett kulcs zászló

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 a Alt és Ctrl billentyűket tartalmazzák a billentyűzet jobb oldalán; a Beszúrás*, Törlés*, Kezdőlap, Záró, Lap fel, Lap lefelé, és nyílbillentyűk a fürtökben a számbillentyűzet bal oldalán; a Num lock key; a Break (Ctrl+Pause) billentyű; a Nyomtatási képernyő billentyű; és a Divide (/) és Enter billentyűket a numerikus billentyűzeten. A jobb oldali Shift kulcs nem tekinthető kiterjesztett kulcsnak, helyette 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 a Alt billentyű le volt-e állítva a billentyűleütési üzenet létrehozásakor. A kód 1, ha a Alt billentyű le volt állítva, és 0, ha fel volt állítva.

Előző kulcsállapot-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áliskulcs-kódját, és ha egy karakter billentyűnek felel meg, biztosítja a karakterkód megfelelőjét, figyelembe véve a Shift és 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.

Holtszereplő ü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 egy rendszer halott kulcsból származó WM_SYSKEYDOWN üzenetet dolgoz fel, ahol a halott kulcsot az Alt billentyűvel együtt nyomják le. 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. Egy olyan szövegszerkesztő alkalmazásnak, amely lehetővé teszi a felhasználó számára, hogy Shift+End billentyűkombinációt lenyomva jelöljön ki egy szövegblokkot, ellenőriznie kell a Shift kulcs állapotát, amikor billentyűleütési üzenetet kap a Záró 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.

Egyes billentyűk kapcsolóbillentyűknek minősülnek, amelyek megváltoztatják a billentyűzetkiosztás állapotát. A kapcsolóbillentyűk általában Caps Lock (VK_CAPITAL), Num Lock (VK_NUMLOCK) és Scroll Lock (VK_SCROLL) billentyűket tartalmazzák. A legtöbb billentyűzet megfelelő LED-jelzőkkel rendelkezik ezekhez a billentyűkhöz.

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. A nem kötelező kulcsok neve, például Tab és 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 a billentyűzetkiosztásbó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.

Gyorsbillentyű 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 a Ctrl+C billentyűkombinációt tartalmazó gyorsbillentyűt definiál, 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.