Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace by měly přijímat uživatelský vstup z klávesnice i z myši. Aplikace přijímá vstup pomocí klávesnice ve formě zpráv odeslaných do svých oken.
Model zadávání klávesnice
Systém poskytuje podporu klávesnice nezávislé na zařízeních pro aplikace instalací ovladače klávesnice vhodného pro aktuální klávesnici. Systém poskytuje podporu klávesnice nezávislou na jazyce pomocí rozložení klávesnice specifického pro jazyk, které aktuálně uživatel nebo aplikace vybral. Ovladač zařízení klávesnice přijímá kódy skenování z klávesnice, které se odesílají do rozložení klávesnice, kde jsou přeloženy do zpráv a publikovány do příslušných oken ve vaší aplikaci.
Každé klávese na klávesnici má přiřazenou jedinečnou hodnotu zvanou scan kód, který je závislý na zařízení a určuje klávesu na klávesnici. Klávesnice generuje dva kódy skenování, když uživatel zadá klávesu – jeden, když uživatel stiskne klávesu a druhý, když uživatel uvolní klávesu.
Ovladač zařízení klávesnice interpretuje kód skenování a překládá ho na kód virtuálního klíče, hodnotu nezávislou na zařízení definovanou systémem, která identifikuje účel klíče. Po překladu kódu skenování vytvoří rozložení klávesnice zprávu, která obsahuje kód kontroly, kód virtuálního klíče a další informace o stisknutí klávesy a potom zprávu umístí do systémové fronty zpráv. Systém odebere zprávu z fronty systémových zpráv a odešle ji do fronty zpráv příslušného vlákna. Nakonec je zpráva odebrána ze smyčky zpráv vlákna a předána příslušné proceduře okna ke zpracování. Následující obrázek znázorňuje model zadávání klávesnice.
Fokus klávesnice a aktivace
Systém posílá zprávy klávesnice do fronty zpráv popředního vlákna, které vytvořilo okno se zaměřením klávesnice. Fokus klávesnice je dočasná vlastnost okna. Systém sdílí klávesnici mezi všemi okny na displeji tak, že posune fokus klávesnice ve směru uživatele z jednoho okna do druhého. Okno s fokusem klávesnice obdrží (z fronty zpráv vlákna, které ho vytvořilo), všechny zprávy klávesnice, dokud se fokus nezmění na jiné okno.
Vlákno může volat funkci GetFocus, aby určilo, která z jeho oken (pokud nějaká existují) má aktuálně klávesnicový fokus. Vlákno může dát fokus klávesnice na jedno ze svých oken voláním funkce SetFocus. Když se fokus klávesnice změní z jednoho okna na druhé, systém odešle zprávu WM_KILLFOCUS do okna, které fokus ztratil, a pak odešle WM_SETFOCUS zprávu do okna, které získalo fokus.
Koncept fokusu klávesnice souvisí s aktivním oknem. aktivní okno je okno nejvyšší úrovně, se kterým uživatel aktuálně pracuje. Okno s fokusem klávesnice je aktivní okno nebo podřízené okno aktivního okna. Aby mohl uživatel identifikovat aktivní okno, systém ho umístí do horní části pořadí Z a zvýrazní jeho záhlaví (pokud má jedno) a ohraničení.
Uživatel může aktivovat okno nejvyšší úrovně tak, že na něj klikne, vybere ho pomocí Alt+Tab nebo Kombinaci kláves Alt+Esc kláves nebo ho vybere ze seznamu úkolů. Vlákno může aktivovat okno nejvyšší vrstvy pomocí funkce SetActiveWindow. Pomocí funkce GetActiveWindow může určit, jestli je vytvořené okno nejvyšší úrovně aktivní.
Když je jedno okno deaktivované a jiné aktivované, systém odešle WM_ACTIVATE zprávu. Slovo s nízkým pořadím parametru wParam je nula, pokud je okno deaktivováno a nenulové, pokud je aktivováno. Když výchozí procedura okna obdrží zprávu WM_ACTIVATE, nastaví fokus klávesnice na aktivní okno.
Chcete-li blokovat události zadávání klávesnice a myši do aplikací, použijte BlockInput. Všimněte si, že funkce BlockInput nebude rušit stavovou tabulku asynchronního vstupu z klávesnice. To znamená, že volání funkce SendInput při blokování vstupu změní asynchronní tabulku stavu vstupu klávesnice.
Zprávy stisknutí kláves
Stisknutí klávesy způsobí, že se zpráva WM_KEYDOWN nebo WM_SYSKEYDOWN umístí do fronty zpráv vlákna připojeného k oknu, které má fokus klávesnice. Uvolnění klíče způsobí umístění zprávy typu WM_KEYUP nebo WM_SYSKEYUP do fronty.
Zprávy s klávesami nahoru a dolů se obvykle vyskytují ve dvojicích, ale pokud uživatel drží klávesu dostatečně dlouho, aby spustil funkci automatického opakování klávesnice, systém vygeneruje řadu WM_KEYDOWN nebo WM_SYSKEYDOWN zpráv za sebou. Potom vygeneruje jednu WM_KEYUP nebo WM_SYSKEYUP zprávu, když uživatel klíč uvolní.
Tato část se zabývá následujícími tématy:
- cs-CZ: O systémových a nesystémových klávesových úhozech
- Popis Virtual-Key kódů
- Příznaky zpráv o stisku kláves
Systémové a nesystémové stisknutí kláves
Systém rozlišuje systémové stisknutí kláves a nesystémové stisknutí kláves. Systémové stisknutí kláves vytváří systémové zprávy, WM_SYSKEYDOWN a WM_SYSKEYUP. Nesystémové stisknutí kláves vytváří nesystémové zprávy stisknutí kláves, WM_KEYDOWN a WM_KEYUP.
Pokud váš postup okna musí zpracovat zprávu systémového stisknutí kláves, ujistěte se, že ji procedura po zpracování zprávy předá funkci DefWindowProc. V opačném případě budou všechny systémové operace zahrnující klávesu Alt zakázány, kdykoli bude mít okno fokus klávesnice. To znamená, že uživatel nebude moct získat přístup k nabídkám okna nebo k systémové nabídce nebo k aktivaci jiného okna použít Alt+Esc nebo Alt+Tab stisknutí kláves.
Zprávy systémového stisknutí kláves jsou primárně určeny pro systém, nikoli pro aplikaci. Systém je používá k poskytování integrovaného rozhraní klávesnice k nabídkám a k tomu, aby uživatel mohl řídit, které okno je aktivní. Zprávy o stisknutí kláves systému se generují, když uživatel zadá klávesu v kombinaci s klávesou Alt nebo když uživatel zadá a žádné okno nemá fokus klávesnice (například když je aktivní aplikace minimalizovaná). V tomto případě se zprávy publikují do fronty zpráv připojené k aktivnímu okně.
Zprávy nesystémového stisknutí kláves jsou určené pro použití v oknech aplikací; funkce DefWindowProc s nimi nic nedělá. Procedura okna může zahodit všechny nesystémové zprávy stisknutí kláves, které nepotřebujete.
Virtual-Key popis kódů
Parametr wParam zprávy týkající se stisknutí klávesy obsahuje virtuální kód klávesy, která byla stisknuta nebo uvolněna. Procedura okna zpracovává nebo ignoruje zprávu stisknutí klávesy v závislosti na hodnotě kódu virtuálního klíče.
Typický postup okna zpracovává pouze malou podmnožinu zpráv stisknutí kláves, které přijímá a ignoruje zbytek. Například procedura okna může zpracovávat pouze WM_KEYDOWN zprávy stisknutí kláves a pouze ty, které obsahují kódy virtuálního klíče pro pohybové klávesy kurzoru, shift klávesy (označované také jako řídicí klávesy) a funkční klávesy. Typický postup okna nezpracovává zprávy o stisknutí kláves z klávesových klíčů. Místo toho používá funkci TranslateMessage k převodu zprávy na zprávy znaků. Další informace o TranslateMessage a znakových zprávách naleznete v tématu Zprávy znaků.
Příznaky zprávy stisknutí klávesy
Parametr lParam zprávy stisknutí klávesy obsahuje další informace o stisknutí klávesy, která zprávu vygenerovala. Tyto informace zahrnují počet opakování , kód skenování , příznak rozšířeného klíče , kontextový kód , příznak předchozího stavu klávesy a příznak stavu přechodu . Následující obrázek znázorňuje umístění těchto příznaků a hodnot v parametru lParam.
Aplikace může použít následující hodnoty k získání příznaků stisknutí kláves z vysoce seřazeného slova lParam.
Příklad kódu:
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;
Počet opakování
Počet opakování můžete zkontrolovat a zjistit, jestli zpráva stisknutí kláves představuje více než jedno stisknutí kláves. Systém zvýší počet, když klávesnice generuje WM_KEYDOWN nebo WM_SYSKEYDOWN zprávy rychleji, než je aplikace dokáže zpracovat. K tomu často dochází, když uživatel podrží klávesu dostatečně dlouho, aby spustil funkci automatického opakování klávesnice. Místo vyplnění systémové fronty zpráv výslednými zprávami o stisknutí klávesy systém kombinuje zprávy do jedné zprávy o stisknutí klávesy a zvyšuje počítadlo opakování. Uvolnění klíče nemůže spustit funkci automatického opakování, takže počet opakování pro WM_KEYUP a WM_SYSKEYUP zprávy je vždy nastaven na hodnotu 1.
Skenovat kódy
Kód kontroly je hodnota, kterou systém generuje, když uživatel stiskne klávesu. Jedná se o hodnotu, která identifikuje stisknutou klávesu bez ohledu na aktivní rozložení klávesnice, na rozdíl od znaku reprezentovaného klávesou. Aplikace obvykle ignoruje kódy skenování. Místo toho používá kódy virtuálních klíčů k interpretaci zpráv o stisknutí kláves.
Moderní klávesnice používají Zařízení pro lidské rozhraní (HID) specifikaci pro komunikaci s počítačem. ovladač klávesnice převede hlášené hodnoty využití HID odeslané z klávesnice na kódy skenování a předává je do aplikací.
Poznámka
I když jsou kódy virtuálních kláves obvykle užitečnější pro desktopové aplikace, můžou být kódy skenování vyžadovány v konkrétních případech, když potřebujete vědět, která klávesa se stiskne bez ohledu na aktuální rozložení klávesnice. Například klávesy WASD (W je nahoru, A je vlevo, S je dolů a D je vpravo) pro hry, které zajišťují konzistentní tvorbu klíčů v US QWERTY nebo francouzské AZERTY rozložení klávesnice.
Následující tabulka uvádí sadu kódů skenování, jak je v současnosti rozpoznáno systémem Windows. stránka použití HID/ID použití HID/název použití HID hodnoty odkazují na dokument tabulek využití HID . Umístění klíče hodnoty odkazují na předchozí obrázek klávesnice.
Kód Scan 1 Make se doručuje ve WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP a WM_INPUT zprávách.
Název stránky využití HID | Název použití HID | Stránka využití HID | ID použití HID | Naskenovat 1 výrobce | Umístění klíče |
---|---|---|---|---|---|
Obecná pracovní plocha | Vypnutí systému | 0x0001 | 0x0081 | 0xE05E | |
Obecná pracovní plocha | Režim spánku systému | 0x0001 | 0x0082 | 0xE05F | |
Obecná pracovní plocha | Probuzení systému | 0x0001 | 0x0083 | 0xE063 | |
Klávesnice/klávesnice numerická | ErrorRollOver | 0x0007 | 0x0001 | 0x00FF | |
Klávesnice/klávesnice numerická | Klávesnice A | 0x0007 | 0x0004 | 0x001E | 31 |
Klávesnice/klávesnice numerická | Klávesnice B | 0x0007 | 0x0005 | 0x0030 | 50 |
Klávesnice/klávesnice numerická | Klávesnice C | 0x0007 | 0x0006 | 0x002E | 48 |
Klávesnice/klávesnice numerická | Klávesnice D | 0x0007 | 0x0007 | 0x0020 | 33 |
Klávesnice/klávesnice numerická | Klávesnice E | 0x0007 | 0x0008 | 0x0012 | 19 |
Klávesnice/klávesnice numerická | Klávesnice F | 0x0007 | 0x0009 | 0x0021 | 34 |
Klávesnice/klávesnice numerická | Klávesnice G | 0x0007 | 0x000A | 0x0022 | 35 |
Klávesnice/klávesnice numerická | Klávesnice H | 0x0007 | 0x000B | 0x0023 | 36 |
Klávesnice/klávesnice numerická | Klávesnice I | 0x0007 | 0x000C | 0x0017 | dvacet čtyři |
Klávesnice/klávesnice numerická | Klávesnice J | 0x0007 | 0x000D | 0x0024 | 37 |
Klávesnice/klávesnice numerická | Klávesnice K | 0x0007 | 0x000E | 0x0025 | 38 |
Klávesnice/klávesnice numerická | Klávesnice L | 0x0007 | 0x000F | 0x0026 | 39 |
Klávesnice/klávesnice numerická | Klávesnice M | 0x0007 | 0x0010 | 0x0032 | 52 |
Klávesnice/klávesnice numerická | Klávesnice N | 0x0007 | 0x0011 | 0x0031 | 51 |
Klávesnice/klávesnice numerická | Klávesnice O | 0x0007 | 0x0012 | 0x0018 | 25 |
Klávesnice/klávesnice numerická | Klávesnice P | 0x0007 | 0x0013 | 0x0019 | 26 |
Klávesnice/klávesnice numerická | Klávesnice Q | 0x0007 | 0x0014 | 0x0010 | 17 |
Klávesnice/klávesnice numerická | Klávesnice R | 0x0007 | 0x0015 | 0x0013 | 20 |
Klávesnice/klávesnice numerická | Klávesnice S | 0x0007 | 0x0016 | 0x001F | 32 |
Klávesnice/klávesnice numerická | Klávesnice T | 0x0007 | 0x0017 | 0x0014 | 21 |
Klávesnice/klávesnice numerická | Klávesnice U | 0x0007 | 0x0018 | 0x0016 | dvacet tři |
Klávesnice/klávesnice numerická | Klávesnice V | 0x0007 | 0x0019 | 0x002F | 49 |
Klávesnice/klávesnice numerická | Klávesnice W | 0x0007 | 0x001A | 0x0011 | 18 |
Klávesnice/klávesnice numerická | Klávesnice X | 0x0007 | 0x001B | 0x002D | 47 |
Klávesnice/klávesnice numerická | Klávesnice Y | 0x0007 | 0x001C | 0x0015 | 22 |
Klávesnice/klávesnice numerická | Klávesnice Z | 0x0007 | 0x001D | 0x002C | 46 |
Klávesnice/klávesnice numerická | Klávesnice 1 a Bang | 0x0007 | 0x001E | 0x0002 | 2 |
Klávesnice/klávesnice numerická | Klávesnice 2 a At | 0x0007 | 0x001F | 0x0003 | 3 |
Klávesnice/klávesnice numerická | Klávesnice 3 a znak hash | 0x0007 | 0x0020 | 0x0004 | 4 |
Klávesnice/klávesnice numerická | Klávesnice 4 a Dolar | 0x0007 | 0x0021 | 0x0005 | 5 |
Klávesnice/klávesnice numerická | Klávesnice 5 a procento | 0x0007 | 0x0022 | 0x0006 | 6 |
Klávesnice/klávesnice numerická | Klávesnice 6 a kurzor | 0x0007 | 0x0023 | 0x0007 | 7 |
Klávesnice/klávesnice numerická | "Klávesnice číslo 7 a Ampersand" | 0x0007 | 0x0024 | 0x0008 | 8 |
Klávesnice/klávesnice numerická | Klávesnice 8 a hvězdička | 0x0007 | 0x0025 | 0x0009 | 9 |
Klávesnice/klávesnice numerická | Klávesnice 9 a levá závorka | 0x0007 | 0x0026 | 0x000A | 10 |
Klávesnice/klávesnice numerická | Klávesnice 0 a pravá hranatá závorka | 0x0007 | 0x0027 | 0x000B | 11 |
Klávesnice/klávesnice numerická | Klávesa Return Enter | 0x0007 | 0x0028 | 0x001C | 43 |
Klávesnice/klávesnice numerická | Klávesa Escape | 0x0007 | 0x0029 | 0x0001 | 110 |
Klávesnice/klávesnice numerická | Odstranění klávesnice | 0x0007 | 0x002A | 0x000E | 15 |
Klávesnice/klávesnice numerická | Tab Klávesnice | 0x0007 | 0x002B | 0x000F | 16 |
Klávesnice/klávesnice numerická | Mezerník klávesnice | 0x0007 | 0x002C | 0x0039 | 61 |
Klávesnice/klávesnice numerická | Klávesnice - pomlčka a podtržítko | 0x0007 | 0x002D | 0x000C | 12 |
Klávesnice/klávesnice numerická | Klávesa Rovná se a Plus | 0x0007 | 0x002E | 0x000D | 13 |
Klávesnice/klávesnice numerická | Levá složená závorka klávesnice | 0x0007 | 0x002F | 0x001A | 27 |
Klávesnice/klávesnice numerická | Pravá složená závorka klávesnice | 0x0007 | 0x0030 | 0x001B | 28 |
Klávesnice/klávesnice numerická | Zpětné lomítko a svislé roury klávesnice | 0x0007 | 0x0031 | 0x002B | 29 |
Klávesnice/klávesnice numerická | Klávesnice pro neamerické prostředí – křížek a vlnovka | 0x0007 | 0x0032 | 0x002B | 42 |
Klávesnice/klávesnice numerická | Středník klávesnice a dvojtečka | 0x0007 | 0x0033 | 0x0027 | 40 |
Klávesnice/klávesnice numerická | Znak apostrofu a dvojité uvozovky na klávesnici | 0x0007 | 0x0034 | 0x0028 | 41 |
Klávesnice/klávesnice numerická | Ostrý přízvuk a vlnovka na klávesnici | 0x0007 | 0x0035 | 0x0029 | 1 |
Klávesnice/klávesnice numerická | Čárka klávesnice a LessThan | 0x0007 | 0x0036 | 0x0033 | 53 |
Klávesnice/klávesnice numerická | Období klávesnice a GreaterThan | 0x0007 | 0x0037 | 0x0034 | 54 |
Klávesnice/klávesnice numerická | Lomítko a otazník klávesnice | 0x0007 | 0x0038 | 0x0035 | 55 |
Klávesnice/klávesnice numerická | Caps Lock klávesnice | 0x0007 | 0x0039 | 0x003A | 30 |
Klávesnice/klávesnice numerická | Klávesnice F1 | 0x0007 | 0x003A | 0x003B | 112 |
Klávesnice/klávesnice numerická | Klávesnice F2 | 0x0007 | 0x003B | 0x003C | 113 |
Klávesnice/klávesnice numerická | Klávesnice F3 | 0x0007 | 0x003C | 0x003D | 114 |
Klávesnice/klávesnice numerická | Klávesnice F4 | 0x0007 | 0x003D | 0x003E | 115 |
Klávesnice/klávesnice numerická | Klávesnice F5 | 0x0007 | 0x003E | 0x003F | 116 |
Klávesnice/klávesnice numerická | Klávesnice F6 | 0x0007 | 0x003F | 0x0040 | 117 |
Klávesnice/klávesnice numerická | Klávesnice F7 | 0x0007 | 0x0040 | 0x0041 | 118 |
Klávesnice/klávesnice numerická | Klávesnice F8 | 0x0007 | 0x0041 | 0x0042 | 119 |
Klávesnice/klávesnice numerická | Klávesnice F9 | 0x0007 | 0x0042 | 0x0043 | 120 |
Klávesnice/klávesnice numerická | Klávesnice F10 | 0x0007 | 0x0043 | 0x0044 | 121 |
Klávesnice/klávesnice numerická | Klávesnice F11 | 0x0007 | 0x0044 | 0x0057 | 122 |
Klávesnice/klávesnice numerická | Klávesnice F12 | 0x0007 | 0x0045 | 0x0058 | 123 |
Klávesnice/klávesnice numerická | Klávesa PrintScreen | 0x0007 | 0x0046 | 0xE037 0x0054 *Poznámka 1 |
124 |
Klávesnice/klávesnice numerická | Zámek posouvání pomocí klávesnice | 0x0007 | 0x0047 | 0x0046 | 125 |
Klávesnice/klávesnice numerická | Klávesová pauza | 0x0007 | 0x0048 | 0xE11D45 0xE046 *Poznámka 2 0x0045 *Poznámka 3 |
126 |
Klávesnice/klávesnice numerická | Vložení klávesnice | 0x0007 | 0x0049 | 0xE052 | 75 |
Klávesnice/klávesnice numerická | Domovská stránka klávesnice | 0x0007 | 0x004A | 0xE047 | 80 |
Klávesnice/klávesnice numerická | klávesa PageUp na klávesnici | 0x0007 | 0x004B | 0xE049 | 85 |
Klávesnice/klávesnice numerická | Klávesová zkratka Odstranit vpřed | 0x0007 | 0x004C | 0xE053 | 76 |
Klávesnice/klávesnice numerická | Konec klávesnice | 0x0007 | 0x004D | 0xE04F | 81 |
Klávesnice/klávesnice numerická | klávesa PageDown | 0x0007 | 0x004E | 0xE051 | 86 |
Klávesnice/klávesnice numerická | Klávesa Šipka vpravo | 0x0007 | 0x004F | 0xE04D | 89 |
Klávesnice/klávesnice numerická | Klávesa Šipka vlevo | 0x0007 | 0x0050 | 0xE04B | 79 |
Klávesnice/klávesnice numerická | Klávesa šipka dolů | 0x0007 | 0x0051 | 0xE050 | 84 |
Klávesnice/klávesnice numerická | klávesa Šipka nahoru | 0x0007 | 0x0052 | 0xE048 | 83 |
Klávesnice/klávesnice numerická | Klávesa Num Lock a Clear | 0x0007 | 0x0053 | 0x0045 0xE045 *Poznámka 3 |
90 |
Klávesnice/klávesnice numerická | Lomítko klávesnice | 0x0007 | 0x0054 | 0xE035 | 95 |
Klávesnice/klávesnice numerická | Hvězdička na klávesnici | 0x0007 | 0x0055 | 0x0037 | 100 |
Klávesnice/klávesnice numerická | Numerická klávesnice pomlčka | 0x0007 | 0x0056 | 0x004A | 105 |
Klávesnice/klávesnice numerická | Klávesnice Plus | 0x0007 | 0x0057 | 0x004E | 106 |
Klávesnice/klávesnice numerická | Klávesnice ENTER | 0x0007 | 0x0058 | 0xE01C | 108 |
Klávesnice/klávesnice numerická | Klávesnice 1 a konec | 0x0007 | 0x0059 | 0x004F | 93 |
Klávesnice/klávesnice numerická | Klávesnice 2 a šipka dolů | 0x0007 | 0x005A | 0x0050 | 98 |
Klávesnice/klávesnice numerická | Klávesnice 3 a PageDn | 0x0007 | 0x005B | 0x0051 | 103 |
Klávesnice/klávesnice numerická | Klávesa 4 a šipka vlevo | 0x0007 | 0x005C | 0x004B | 92 |
Klávesnice/klávesnice numerická | Klávesnice 5 | 0x0007 | 0x005D | 0x004C | 97 |
Klávesnice/klávesnice numerická | Klávesnice 6 a šipka vpravo | 0x0007 | 0x005E | 0x004D | 102 |
Klávesnice/klávesnice numerická | Klávesa 7 a klávesa Home | 0x0007 | 0x005F | 0x0047 | 91 |
Klávesnice/klávesnice numerická | Klávesnice 8 a šipka nahoru | 0x0007 | 0x0060 | 0x0048 | 96 |
Klávesnice/klávesnice numerická | Klávesnice 9 a PageUp | 0x0007 | 0x0061 | 0x0049 | 101 |
Klávesnice/klávesnice numerická | Klávesnice 0 a vložení | 0x0007 | 0x0062 | 0x0052 | 99 |
Klávesnice/klávesnice numerická | Období klávesnice a odstranění | 0x0007 | 0x0063 | 0x0053 | 104 |
Klávesnice/klávesnice numerická | Klávesnice mimo USA – zpětné lomítko a svislítko | 0x0007 | 0x0064 | 0x0056 | 45 |
Klávesnice/klávesnice numerická | Klávesová aplikace | 0x0007 | 0x0065 | 0xE05D | 129 |
Klávesnice/klávesnice numerická | Napájení klávesnice | 0x0007 | 0x0066 | 0xE05E | |
Klávesnice/klávesnice numerická | Klávesnice se rovná | 0x0007 | 0x0067 | 0x0059 | |
Klávesnice/klávesnice numerická | Klávesnice F13 | 0x0007 | 0x0068 | 0x0064 | |
Klávesnice/klávesnice numerická | Klávesnice F14 | 0x0007 | 0x0069 | 0x0065 | |
Klávesnice/klávesnice numerická | Klávesnice F15 | 0x0007 | 0x006A | 0x0066 | |
Klávesnice/klávesnice numerická | Klávesnice F16 | 0x0007 | 0x006B | 0x0067 | |
Klávesnice/klávesnice numerická | Klávesnice F17 | 0x0007 | 0x006C | 0x0068 | |
Klávesnice/klávesnice numerická | Klávesnice F18 | 0x0007 | 0x006D | 0x0069 | |
Klávesnice/klávesnice numerická | Klávesnice F19 | 0x0007 | 0x006E | 0x006A | |
Klávesnice/klávesnice numerická | Klávesnice F20 | 0x0007 | 0x006F | 0x006B | |
Klávesnice/klávesnice numerická | Klávesnice F21 | 0x0007 | 0x0070 | 0x006C | |
Klávesnice/klávesnice numerická | Klávesnice F22 | 0x0007 | 0x0071 | 0x006D | |
Klávesnice/klávesnice numerická | Klávesnice F23 | 0x0007 | 0x0072 | 0x006E | |
Klávesnice/klávesnice numerická | Klávesnice F24 | 0x0007 | 0x0073 | 0x0076 | |
Klávesnice/klávesnice numerická | Numerická klávesnice čárka | 0x0007 | 0x0085 | 0x007E | 107 *Poznámka 4 |
Klávesnice/klávesnice numerická | Klávesnice International1 | 0x0007 | 0x0087 | 0x0073 | 56 *Poznámka 4, 5 |
Klávesnice/klávesnice numerická | Klávesnice International2 | 0x0007 | 0x0088 | 0x0070 | 133 *Poznámka 5 |
Klávesnice/klávesnice numerická | Klávesnice International3 | 0x0007 | 0x0089 | 0x007D | 14 *Poznámka 5 |
Klávesnice/klávesnice numerická | Klávesnice International4 | 0x0007 | 0x008A | 0x0079 | 132 *Poznámka 5 |
Klávesnice/klávesnice numerická | Klávesnice International5 | 0x0007 | 0x008B | 0x007B | 131 *Poznámka 5 |
Klávesnice/klávesnice numerická | Klávesnice International6 | 0x0007 | 0x008C | 0x005C | |
Klávesnice/klávesnice numerická | Klávesnice LANG1 | 0x0007 | 0x0090 | 0x0072 *Poznámka 6 0x00F2 *Poznámka 3, 6 |
|
Klávesnice/klávesnice numerická | Klávesnice LANG2 | 0x0007 | 0x0091 | 0x0071 *Poznámka 6 0x00F1 *Poznámka 3, 6 |
|
Klávesnice/klávesnice numerická | Klávesnice LANG3 | 0x0007 | 0x0092 | 0x0078 | |
Klávesnice/klávesnice numerická | Klávesnice LANG4 | 0x0007 | 0x0093 | 0x0077 | |
Klávesnice/klávesnice numerická | Klávesnice LANG5 | 0x0007 | 0x0094 | 0x0076 | |
Klávesnice/klávesnice numerická | Klávesnice Levý Control | 0x0007 | 0x00E0 | 0x001D | 58 |
Klávesnice/klávesnice numerická | Klávesnice LeftShift | 0x0007 | 0x00E1 | 0x002A | 44 |
Klávesnice/klávesnice numerická | Klávesa LeftAlt | 0x0007 | 0x00E2 | 0x0038 | 60 |
Klávesnice/klávesnice numerická | Grafické uživatelské rozhraní levého uživatelského rozhraní klávesnice | 0x0007 | 0x00E3 | 0xE05B | 127 |
Klávesnice/klávesnice numerická | Klávesnice PravýControl | 0x0007 | 0x00E4 | 0xE01D | 64 |
Klávesnice/klávesnice numerická | Klávesnice RightShift | 0x0007 | 0x00E5 | 0x0036 | 57 |
Klávesnice/klávesnice numerická | Klávesa RightAlt | 0x0007 | 0x00E6 | 0xE038 | 62 |
Klávesnice/klávesnice numerická | Pravé grafické uživatelské rozhraní klávesnice | 0x0007 | 0x00E7 | 0xE05C | 128 |
Spotřebitel | Skenovat další skladbu | 0x000C | 0x00B5 | 0xE019 | |
Spotřebitel | Skenovat předchozí skladbu | 0x000C | 0x00B6 | 0xE010 | |
Spotřebitel | Zastavte | 0x000C | 0x00B7 | 0xE024 | |
Spotřebitel | Přehrát/pozastavit | 0x000C | 0x00CD | 0xE022 | |
Spotřebitel | Ztlumit | 0x000C | 0x00E2 | 0xE020 | |
Spotřebitel | Zvýšení objemu | 0x000C | 0x00E9 | 0xE030 | |
Spotřebitel | Snížení hlasitosti | 0x000C | 0x00EA | 0xE02E | |
Spotřebitel | Konfigurace zákaznického řízení AL | 0x000C | 0x0183 | 0xE06D | |
Spotřebitel | E-mailová čtečka AL | 0x000C | 0x018A | 0xE06C | |
Spotřebitel | Kalkulačka AL | 0x000C | 0x0192 | 0xE021 | |
Spotřebitel | Prohlížeč místního počítače AL | 0x000C | 0x0194 | 0xE06B | |
Spotřebitel | AC Vyhledávání | 0x000C | 0x0221 | 0xE065 | |
Spotřebitel | Domovská stránka AC | 0x000C | 0x0223 | 0xE032 | |
Spotřebitel | Zadní část AC | 0x000C | 0x0224 | 0xE06A | |
Spotřebitel | AC Forward | 0x000C | 0x0225 | 0xE069 | |
Spotřebitel | Zarážka AC | 0x000C | 0x0226 | 0xE068 | |
Spotřebitel | Obnovení AC | 0x000C | 0x0227 | 0xE067 | |
Spotřebitel | Záložky AC | 0x000C | 0x022A | 0xE066 |
Poznámky:
- Kód skenování kláves SysRq se vysílá při stisknutí Alt+Print.
- Break skanovací kód je vygenerován při stisknutí kláves Ctrl+Pause
- Jak je vidět ve starších klávesových zprávách
- Klávesa je k dispozici na brazilských klávesnicích.
- Klávesa je k dispozici na japonských klávesnicích.
- Skenerový kód se vygeneruje pouze v události uvolnění klávesy.
Příznak Extended-Key
Příznak rozšířeného klíče označuje, jestli zpráva stisknutí kláves pochází z jedné z dalších kláves na klávesnici s rozšířenými klávesami 101/102. Rozšířené klávesy se skládají z Alt a kláves Ctrl na pravé straně klávesnice; Vložit*, Odstranit*, Domů, Konec, Page Up, Page Downa Šipka ve skupinách vlevo od numerické klávesnice; klávesy Num Lock; klávesy Break (Ctrl+Pause); klávesy Print screen; a klávesy Divide (/) a Enter na numerické klávesnici. Pravá klávesa Shift není považována za rozšířenou klávesu, ale má vlastní kód skenování.
Pokud je zadáno, kód kontroly se skládá ze sekvence dvou bajtů, kde první bajt má hodnotu 0xE0.
Kontextový kód
Kontextový kód označuje, jestli Klávesa Alt byla po vygenerování zprávy o stisknutí klávesy dolů. Kód je 1, pokud Klávesa Alt byla dolů a 0, pokud byla nahoru.
Příznak předchozího stavu klávesy
Příznak předchozího stavu klíče označuje, jestli byl klíč, který vygeneroval zprávu o stisknutí klávesy, dříve nahoru nebo dolů. Jedná se o 1, pokud byl klíč dříve nižší a 0, pokud byl klíč dříve nahoru. Tento příznak můžete použít k identifikaci zpráv o stisknutí kláves vygenerovaných funkcí automatického opakování klávesnice. Tento příznak je nastaven na hodnotu 1 pro WM_KEYDOWN a WM_SYSKEYDOWN zprávy stisknutí kláves vygenerované funkcí automatického opakování. Pro WM_KEYUP a WM_SYSKEYUP zprávy je vždy hodnota nastavena na 1.
Vlajka stavu přechodu
Příznak přechodu-stav označuje, zda stisknutí klávesy nebo uvolnění klávesy vygenerovalo zprávu stisknutí klávesy. Tento příznak je vždy nastaven na 0 pro WM_KEYDOWN a WM_SYSKEYDOWN zprávy. Pro WM_KEYUP a WM_SYSKEYUP zprávy je vždy nastaven na 1.
Zprávy postav
Zprávy o stisknutí kláves poskytují mnoho informací o stisknutích kláves, ale neposkytují znakové kódy pro stisknutí znakových kláves. Aby bylo možné načíst kódy znaků, musí aplikace do smyčky zpráv vlákna zahrnout funkci TranslateMessage. TranslateMessage předává WM_KEYDOWN nebo WM_SYSKEYDOWN zprávu do rozložení klávesnice. Rozložení prozkoumá kód virtuálního klíče zprávy a pokud odpovídá klíči znaku, poskytne odpovídající kód znaku (s ohledem na stav kláves Shift a Caps Lock). Potom vygeneruje znakovou zprávu, která obsahuje kód znaku a umístí zprávu do horní části fronty zpráv. Další iterace smyčky zpráv odebere znakovou zprávu z fronty a předá zprávu příslušné proceduře okna.
Tato část se zabývá následujícími tématy:
Zprávy o nesystémových znacích
Procedura okna může přijímat následující zprávy znaků: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHARa WM_UNICHAR. Funkce TranslateMessage při zpracování zprávy WM_KEYDOWN vygeneruje WM_CHAR nebo WM_DEADCHAR zprávu. Podobně generuje WM_SYSCHAR nebo WM_SYSDEADCHAR zprávu, když zpracovává WM_SYSKEYDOWN zprávu.
Aplikace, která zpracovává vstup klávesnice, obvykle ignoruje všechny zprávy kromě WM_CHAR a WM_UNICHAR zpráv a předává všechny ostatní zprávyfunkciDefWindowProc. Všimněte si, že WM_CHAR používá UTF-16 (16bitový formát transformace Unicode) nebo znakovou sadu ANSI, zatímco WM_UNICHAR vždy používá UTF-32 (32bitový formát transformace Unicode). Systém používá zprávy WM_SYSCHAR a WM_SYSDEADCHAR k implementaci menu mnemotechnik.
Parametr wParam všech zpráv obsahujících znaky obsahuje kód znaku klávesy, která byla stisknuta. Hodnota kódu znaku závisí na třídě okna, které přijímá zprávu. Pokud byla k registraci třídy okna použita verze Unicode RegisterClass funkce, systém poskytuje znaky Unicode pro všechna okna této třídy. V opačném případě systém poskytuje kódy znaků ANSI. Další informace najdete v tématu Registrace tříd oken a Používání znakových stránek UTF-8 v aplikacích pro Windows.
Obsah parametru lParam znakové zprávy je identický s obsahem parametru lParam zprávy stisknutí klávesy, která byla přeložena pro vytvoření znakové zprávy. Pro informace viz Příznaky zprávy o stisku kláves.
Dead-Character Zprávy
Některé neanglické klávesnice obsahují znakové klávesy, které by samy neměly vytvářet znaky. Místo toho se používají k přidání diakritiky k znaku vytvořenému následným stisknutí klávesy. Tyto klávesy se nazývají mrtvé klávesy. Circumflexní klávesa na německé klávesnici je příkladem mrtvé klávesy. Pokud chce uživatel zadat znak, který se skládá z "o" se stříškou, německý uživatel napíše nejprve klávesu pro stříšku a poté klávesu "o". V okně s fokusem klávesnice by se zobrazila následující posloupnost zpráv:
TranslateMessage generuje zprávu WM_DEADCHAR, když zpracovává zprávu WM_KEYDOWN ze zastavené klávesy. Přestože wParam parametr zprávy WM_DEADCHAR obsahuje kód znaku diakritických znamének pro mrtvý klíč, aplikace obvykle zprávu ignoruje. Místo toho zpracuje WM_CHAR zprávu vygenerovanou následným stisknutí klávesy. Parametr wParam zprávy WM_CHAR obsahuje kód znaku pro písmeno s diakritikou. Pokud následující stisknutí klávesy vygeneruje znak, který nelze kombinovat s diakritikou, systém vygeneruje dvě WM_CHAR zprávy. Parametr wParam prvního parametru obsahuje kód znaku diakritického znaménka; parametr wParam druhého parametru obsahuje kód znaku následujícího znakového klíče.
Funkce TranslateMessage vygeneruje WM_SYSDEADCHAR zprávu při zpracování WM_SYSKEYDOWN zprávy ze systémového mrtvého klíče (neaktivní klávesa, která se stiskne v kombinaci s klávesou Alt). Aplikace obvykle ignoruje WM_SYSDEADCHAR zprávu.
Stav klíče
Při zpracování zprávy klávesnice může aplikace potřebovat určit stav jiné klávesy kromě té, která vygenerovala aktuální zprávu. Například aplikace pro zpracování textu, která uživateli umožňuje stisknout Shift+End vybrat blok textu, musí zkontrolovat stav klávesy Shift, kdykoli obdrží zprávu o stisknutí klávesy z klávesy End. Aplikace může použít funkci GetKeyState k určení stavu virtuálního klíče v době vygenerování aktuální zprávy; může použít funkci GetAsyncKeyState k načtení aktuálního stavu virtuálního klíče.
Některé klávesy se považují za přepínače, které mění stav rozložení klávesnice. Mezi přepínací klávesy obvykle patří klávesa Caps Lock (VK_CAPITAL), klávesa Num Lock (VK_NUMLOCK), a klávesa Scroll Lock (VK_SCROLL). Většina klávesnic má pro tyto klávesy odpovídající indikátory LED.
Rozložení klávesnice udržuje seznam názvů. Název klíče, který vytvoří jeden znak, je stejný jako znak vytvořený klíčem. Název neznakového klíče, jako například Tab a Enter, je uložen jako řetězec znaků. Aplikace může načíst název libovolné klávesy z rozložení klávesnice zavoláním funkce GetKeyNameText.
Překlady stisků kláves a znaků
Systém obsahuje několik speciálních funkcí, které překládají kódy skenování, kódy znaků a kódy virtuálních klíčů poskytované různými zprávami o stisknutí kláves. Mezi tyto funkce patří MapVirtualKey, ToAscii, ToUnicodea VkKeyScan.
Kromě toho Microsoft Rich Edit 3.0 podporuje HexToUnicode IME, který umožňuje uživateli převádět mezi šestnáctkovými a Unicode znaky pomocí klávesových zkratek. To znamená, že když je Microsoft Rich Edit 3.0 začleněn do aplikace, aplikace dědí funkce hexToUnicode IME.
podpora klávesových zkratek
klávesová zkratka je kombinace kláves, která vygeneruje WM_HOTKEY zprávu, kterou systém umístí na začátek fronty zpráv vlákna, čímž obejde všechny existující zprávy ve frontě. Aplikace používají klávesové zkratky k získání zadání z klávesnice s vysokou prioritou od uživatele. Například definováním klávesové zkratky složené z Ctrl+C stisknutí kláves může aplikace uživateli povolit zrušení zdlouhavé operace.
K definování klávesové zkratky aplikace volá funkci RegisterHotKey, která určuje kombinaci kláves, která generuje WM_HOTKEY zprávu, popisovač okna pro příjem zprávy a identifikátor klávesové zkratky. Když uživatel stiskne klávesovou zkratku, umístí se zpráva WM_HOTKEY do fronty zpráv vlákna, které okno vytvořilo. Parametr wParam zprávy obsahuje identifikátor klávesové zkratky. Aplikace může definovat více klávesových zkratek pro vlákno, ale každá klávesa ve vlákně musí mít jedinečný identifikátor. Před ukončením aplikace by měla použít funkci UnregisterHotKey ke zničení klávesové zkratky.
Aplikace mohou používat ovládací prvek s klávesovou zkratkou, aby uživatel mohl klávesovou zkratku jednoduše zvolit. Ovládací prvky horkých kláves se obvykle používají k definování klávesové zkratky, která aktivuje okno; nepoužívají funkce RegisterHotKey a UnregisterHotKey. Místo toho aplikace, která používá ovládací prvek klávesové zkratky, obvykle odešle zprávu WM_SETHOTKEY k nastavení klávesové zkratky. Pokaždé, když uživatel stiskne klávesovou zkratku, systém odešle WM_SYSCOMMAND zprávu určující SC_HOTKEY. Další informace o ovládacích prvcích klávesových zkratek naleznete v tématu "Použití ovládacích prvků klávesových zkratek" v Hot Key Controls.
Klávesové zkratky pro procházení a další funkce
Systém Windows podporuje klávesnice se speciálními klávesami pro funkce prohlížeče, funkce médií, spouštění aplikací a řízení spotřeby. WM_APPCOMMAND podporuje další klávesové zkratky. Kromě toho je funkce ShellProc upravena tak, aby podporovala další klávesové zkratky.
Je nepravděpodobné, že podřízené okno v aplikaci komponenty bude moct přímo implementovat příkazy pro tyto nadbytečné klávesové zkratky. Když je tedy stisknuta jedna z těchto kláves, DefWindowProc odešle WM_APPCOMMAND zprávu do okna. DefWindowProc také propaguje zprávu WM_APPCOMMAND k nadřazenému oknu. To se podobá způsobu, jakým jsou místní nabídky vyvolány pravým tlačítkem myši, což znamená, že DefWindowProc na kliknutí pravým tlačítkem odešle zprávu WM_CONTEXTMENU a předá ji svému nadřazenému prvku. Kromě toho, pokud DefWindowProc obdrží WM_APPCOMMAND zprávu pro okno nejvyšší úrovně, zavolá systémový hák s kódem HSHELL_APPCOMMAND.
Systém Windows podporuje také Microsoft IntelliMouse Explorer, což je myš s pěti tlačítky. Dvě další tlačítka podporují navigaci v prohlížeči dopředu a dozadu. Další informace naleznete na XBUTTONs.
Simulace vstupu
K simulaci nepřerušované řady událostí uživatelského vstupu použijte funkci SendInput. Funkce přijímá tři parametry. První parametr, cInputs, označuje počet vstupních událostí, které budou simulovány. Druhý parametr, rgInputs, je pole INPUT struktur, přičemž každá z nich popisuje typ vstupní události a další informace o této události. Poslední parametr, cbSize, přijímá velikost INPUT struktury v bajtech.
Funkce SendInput funguje vložením řady simulovaných vstupních událostí do vstupního datového proudu zařízení. Účinek se podobá opakovanému volání keybd_event nebo mouse_event funkce s tím rozdílem, že systém zajistí, že žádné další vstupní události nezasahují do simulovaných událostí. Po dokončení volání vrátí vrácená hodnota počet vstupních událostí, které se úspěšně přehrály. Pokud je tato hodnota nula, vstup se zablokoval.
Funkce SendInput neobnovuje aktuální stav klávesnice. Pokud tedy uživatel při volání této funkce stiskne nějaké klávesy, může narušovat události, které tato funkce vygeneruje. Pokud máte obavy o možnou interferenci, zkontrolujte stav klávesnice pomocí funkce GetAsyncKeyState a podle potřeby opravte.
Jazyky, národní prostředí a rozložení klávesnice
jazyk je přirozený jazyk, jako je angličtina, francouzština a japonština. sublanguage je varianta přirozeného jazyka, který se mluví v konkrétní geografické oblasti, jako jsou anglické podjazyky mluvené ve Spojeném království a Spojených státech. Aplikace používají hodnoty, označované jako identifikátory jazyka , k jedinečné identifikaci jazyků a podlanguage.
Aplikace obvykle používají národní prostředí k nastavení jazyka, ve kterém se zpracovává vstup a výstup. Nastavení národního prostředí klávesnice má například vliv na hodnoty znaků vygenerované klávesnicí. Nastavení národního prostředí pro displej nebo tiskárnu má vliv na zobrazené nebo vytištěné glyfy. Aplikace nastavují národní prostředí klávesnice načtením a použitím rozložení klávesnice. Národní prostředí pro zobrazení nebo tiskárnu nastaví výběrem písma, které podporuje zadané národní prostředí.
Rozložení klávesnice určuje nejen fyzickou pozici kláves na klávesnici, ale také určuje hodnoty znaků vygenerované stisknutím těchto kláves. Každé rozložení identifikuje aktuální jazyk zadávání a určuje, které hodnoty znaků se generují pomocí kláves a kombinací kláves.
Každé rozložení klávesnice má odpovídající identifikátor, který identifikuje rozložení a jazyk. Nízké slovo popisovače je identifikátor jazyka. Horní slovo je úchyt zařízení, které určuje fyzické rozložení; nebo je nula, což označuje výchozí fyzické rozložení. Uživatel může přidružit libovolný jazyk zadávání k fyzickému rozložení. Například anglicky mluvící uživatel, který velmi příležitostně pracuje ve francouzštině, může nastavit jazyk zadávání klávesnice na francouzštinu beze změny fyzického rozložení klávesnice. To znamená, že uživatel může zadat text ve francouzštině pomocí známého anglického rozložení.
Aplikace se obecně neočekávají, že budou pracovat s vstupními jazyky přímo. Místo toho uživatel nastaví kombinace jazyka a rozložení a pak mezi nimi přepne. Když uživatel klikne na text označený jiným jazykem, aplikace zavolá funkci ActivateKeyboardLayout k aktivaci výchozího rozložení uživatele pro daný jazyk. Pokud uživatel upravuje text v jazyce, který není v aktivním seznamu, může aplikace volat LoadKeyboardLayout funkci s jazykem, aby získala rozložení podle daného jazyka.
Funkce ActivateKeyboardLayout nastaví jazyk zadávání pro aktuální úlohu. Parametr hkl může být buď popisovač rozložení klávesnice, nebo nulově rozšířený identifikátor jazyka. Popisovače rozložení klávesnice lze získat pomocí funkcí LoadKeyboardLayout nebo GetKeyboardLayoutList. Hodnoty HKL_NEXT a HKL_PREV lze také použít k výběru další nebo předchozí klávesnice.
Funkce GetKeyboardLayoutName načte název aktivního rozložení klávesnice pro volající vlákno. Pokud aplikace vytvoří aktivní rozložení pomocí funkce LoadKeyboardLayout, GetKeyboardLayoutName načte stejný řetězec použitý k vytvoření rozložení. V opačném případě je řetězec identifikátor primárního jazyka odpovídající národnímu prostředí aktivního rozložení. To znamená, že funkce nemusí nutně rozlišovat mezi různými rozloženími se stejným primárním jazykem, takže nelze vrátit konkrétní informace o jazyku zadávání. Funkci GetKeyboardLayout lze použít k určení jazyka zadávání.
Funkce LoadKeyboardLayout načte rozložení klávesnice a zpřístupní rozložení uživateli. Aplikace můžou rozložení okamžitě aktivovat pro aktuální vlákno pomocí hodnoty KLF_ACTIVATE. Aplikace může pomocí KLF_REORDER hodnoty změnit pořadí rozložení, aniž by také zadala hodnotu KLF_ACTIVATE. Aplikace by při načítání rozložení klávesnice měly vždy používat KLF_SUBSTITUTE_OK hodnotu, aby byla vybrána předvolba uživatele( pokud existuje).
Pro podporu více jazyků poskytuje funkce LoadKeyboardLayout příznaky KLF_REPLACELANG a KLF_NOTELLSHELL. Příznak KLF_REPLACELANG nasměruje funkci tak, aby nahradila stávající rozložení klávesnice beze změny jazyka. Pokus o nahrazení existujícího rozložení pomocí stejného identifikátoru jazyka, ale bez zadání KLF_REPLACELANG je chyba. Příznak KLF_NOTELLSHELL zabrání funkci v tom, aby informovala shell při přidání nebo nahrazení rozložení klávesnice. To je užitečné pro aplikace, které přidávají více rozložení do po sobě jdoucí řady volání. Tento příznak by se měl používat ve všech voláních kromě posledního volání.
Funkce UnloadKeyboardLayout je omezená v tom, že nemůže uvolnit výchozí jazyk zadávání systému. Tím se zajistí, že uživatel bude mít vždy k dispozici jedno rozložení pro zadání textu pomocí stejné znakové sady, jakou používá prostředí a systém souborů.