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ű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.
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
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:
- SysRq billentyű beolvasási kódja kibocsátásra kerül Alt+Print Screen billentyűkombinációval
- Break kulcs szkennelési kód megjelenik Control+Pause billentyűleütéskor
- Ahogy a régi billentyűzet-üzenetekben látható
- A kulcs brazil billentyűzeteken van jelen
- A kulcs japán billentyűzeteken van jelen
- 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:
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.