ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅

ΠšΠΎΠ΄Ρ‹ клавиш ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ΄ΠΎΠ² клавиш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Key Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… событий OnKeyDown ΠΈ OnKeyUp :

Клавиша

ДСс.
число

ШСст.
число

БимволичСскоС
имя

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ord

F1112$70VK_F1F2113$71VK_F2F3114$72VK_F3F4115$73VK_F4F5116$74VK_F5F6117$75VK_F6F7118$76VK_F7F8119$77VK_F8F9120$78VK_F9F10121$79VK_F10ΠΏΡ€ΠΎΠ±Π΅Π»32$20VK_SPACEBackSpace8$8VK_BACKTab9$9VK_TABEnter13$0DVK_RETURNShift16$10VK_SHIFTCtrl17$11VK_CONTROLAlt18$12VK_MENUCapsLock20$14VK_CAPITALEsc27$1BVK_ESCAPEInsert45$2DVK_INSERTPageUp33$21VK_PRIORPageDown34$22VK_NEXTEnd35$23VK_ENDHome36$24VK_HOMEΠ‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π½Π°Π·Π°Π΄37$25VK_LEFTΠ‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²Π²Π΅Ρ€Ρ…38$26VK_UPΠ‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²ΠΏΠ΅Ρ€Π΅Π΄39$27VK_RIGHTΠ‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²Π½ΠΈΠ·40$28VK_DOWNDelete46$2EVK_DELETEPrintScreen44$2CVK_SNAPSHOTScrollLock145$91VK_SCROLLPause19$13VK_PAUSENumLock144$90VK_NUMLOCK0,)48$30Ord(β€˜0’)1!49$31Ord(β€˜1’)2@50$32Ord(β€˜2’)3#51$33Ord(β€˜3’)4$52$34Ord(β€˜4’)5%53$35Ord(β€˜5’)6^54$36Ord(β€˜6’)7&55$37Ord(β€˜7’)8*56$38Ord(β€˜8’)9(57$39Ord(β€˜9’)`

192$C0-_189$BD=+187$BB[ <219$DB]>221$DD:;186$BAβ€˜β€222$DE|220$DC,190$BE/?191$BFA a65$41Ord(β€˜A’)B b66$42Ord(β€˜B’)Π‘ с67$43Ord(β€˜Π‘β€™)D d68$44Ord(β€˜D’)E e69$45Ord(β€˜E’)F f70$46Ord(β€˜F’)G g71$47Ord(β€˜G’)H h72$48Ord(β€˜H’)I i73$49Ord(β€˜I’)J j74$4AOrd(β€˜J’)K k75$4BOrd(β€˜K’)L l76$4COrd(β€˜L’)M m77$4DOrd(β€˜M’)N n78$4EOrd(β€˜N’)O o79$4FOrd(β€˜O’)P p80$50Ord(β€˜P’)Q q81$51Ord(β€˜Q’)R r82$52Ord(β€˜R’)S s83$53Ord(β€˜S’)T t84$54Ord(β€˜T’)U u85$55Ord(β€˜U’)V v86$56Ord(β€˜V’)W w87$57Ord(β€˜W’)X x88$58Ord(β€˜X’)Y y89$59Ord(β€˜Y’)Z z90$5AOrd(β€˜Z’)

ΠŸΡ€Π°Π²Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ клавишС NumLock:

Клавиша

ДСс.
число

ШСст.
число

БимволичСскоС
имя

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Бобытия ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² JavaScript

ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² javascript Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ сразу нСсколько событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ устройством Π²Π²ΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ тСорСтичСской ΠΈ практичСской части.

Бобытия ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π’ JS для ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 3 основных события:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. k 1. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅-k 1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° k 1. Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ΄ΠΎΠ² клавиш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Key Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… событий OnKeyDown ΠΈ OnKeyUp :

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. k 2. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅-k 2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° k 2. Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ΄ΠΎΠ² клавиш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Key Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… событий OnKeyDown ΠΈ OnKeyUp :

Для избСТания ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Β«keydownΒ» ΠΈ Β«keypressΒ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свойство Β«repeatΒ». ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… использовался ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«addEventListenerΒ», Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ свойств событий

Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ клавишС ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«eventΒ».

Бвойства key ΠΈ keyCode

key β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши Π² Π²ΠΈΠ΄Π΅ строки. НапримСр, «F», «5» ΠΈΠ»ΠΈ «Enter».

keyCode β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числовой ΠΊΠΎΠ΄. Для события Β«keypressΒ» Π²Π΅Ρ€Π½Ρ‘Ρ‚ ASCII-ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠ³ΠΎ символа.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π¦ΠΈΡ„Ρ€Ρ‹ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΈ Π±ΠΎΠΊΠΎΠ²ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Β«keyCodeΒ».

ΠšΠΎΠ΄Ρ‹ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… клавиш:

КлавишаKeykeyCode
Π’Π²ΠΎΠ΄Enter13
Π‘Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒBackspace8
Π£Π΄Π°Π»ΠΈΡ‚ΡŒDelete46
ΠŸΡ€ΠΎΠ±Π΅Π»Space32
ВабуляторTab9
EscEscape27
Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²Π»Π΅Π²ΠΎArrowLeft37
Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²Π²Π΅Ρ€Ρ…ArrowUp38
Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²ΠΏΡ€Π°Π²ΠΎArrowRight39
Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° Π²Π½ΠΈΠ·ArrowDown40
ShiftShift16
CtrlControl17
AltAlt18

Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π² JavaScript считаСтся использованиС Β«keyΒ», Π° Π½Π΅ Β«keyCodeΒ». Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ избавляСт ΠΎΡ‚ нСобходимости Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ соотвСтствиС ΠΊΠΎΠ΄ΠΎΠ² ΠΈΡ… значСниям.

Бвойства code ΠΈ charCode

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для события Β«keypressΒ».

НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ IE ΠΈ старыми вСрсиями Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ².

Бвойства altKey, ctrlKey, shiftKey

Бвойство type

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ события Π² Π²ΠΈΠ΄Π΅ строки. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ примСняСтся сразу для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… событий.

Бвойство repeat

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Β«trueΒ», Ссли событиС ΡƒΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΈ автоматичСски вызываСтся снова. Подобная ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π·Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши Π½Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя β€” Β«keydownΒ» ΠΈ Β«keypressΒ» Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π²ΠΎΠ΄Π° Π² Input

Рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Π²Π²ΠΎΠ΄ Π² тСкстовоС ΠΏΠΎΠ»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нуля ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ стирания, удалСния ΠΈ табуляции.

ΠœΠ΅Ρ‚ΠΎΠ΄ Β«preventDefault()Β» Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ дСйствиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΊΠΎ всСм тСкстовыми полями Π½Π° страницС:

ΠšΠΎΠ΄Ρ‹ клавиш

ΠŸΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ курсор Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

НСпосрСдствСнная Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ


Автор: Stanky
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: RSDN Magazine #1-2005

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 27.08.2005
Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ: 10.12.2016
ВСрсия тСкста: 1.0

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. mag0105. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅-mag0105. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° mag0105. Π’Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΠ΄ΠΎΠ² клавиш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Key Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… событий OnKeyDown ΠΈ OnKeyUp :

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°, Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ происходит ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ клавиши.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ простого ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ прСрывания для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° (Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€).

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ Π»ΠΈΠ±ΠΎ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ элСктроника ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ скан-ΠΊΠΎΠ΄ клавиши Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΎΡ‚ 1 Π΄ΠΎ 6 Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ€Ρ‚Π° Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° 0x60. Π‘ΠΊΠ°Π½-ΠΊΠΎΠ΄ – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ число, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Π½Π°ΠΆΠ°Ρ‚ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ, Π½ΠΎ Π½Π΅ ASCII-ΠΊΠΎΠ΄. Π‘ΠΊΠ°Π½-ΠΊΠΎΠ΄Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²: ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши гСнСрируСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Make-ΠΊΠΎΠ΄, Π° ΠΏΡ€ΠΈ Π΅Ρ‘ отпускании Break-ΠΊΠΎΠ΄. ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Break-ΠΊΠΎΠ΄Π΅ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° установлСн Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π‘ΠΊΠ°Π½-ΠΊΠΎΠ΄Ρ‹ дСлятся Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ΄ клавиши Pause. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ скан-ΠΊΠΎΠ΄ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ – ΠΈΠ· 2-Ρ… Π±Π°ΠΉΡ‚, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… – 0xE0. Π”Π»ΠΈΠ½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° – ΠΎΡ‚ 2 Π΄ΠΎ 4 Π±Π°ΠΉΡ‚. Он Ρ‚Π°ΠΊ ΠΆΠ΅ начинаСтся с 0xE0. ΠžΡ‡Π΅Π½ΡŒ сильно ΠΈΠ· ΠΊΠΎΠ»Π΅ΠΈ выбиваСтся Pause – это СдинствСнная клавиша, ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ состоит ΠΈΠ· 6 Π±Π°ΠΉΡ‚, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Break-ΠΊΠΎΠ΄ Ρƒ Π½Π΅Ρ‘ отсутствуСт.

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: ΠΏΠΎ опросу ΠΈ ΠΏΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ. Π― Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΅ эффСктивСн ΠΈ Π΅Π³ΠΎ рСализация ΠΏΡ€ΠΎΡ‰Π΅. Когда Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, происходит запрос прСрывания ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ IRQ1. Помимо самих скан-ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния свСтодиодов).

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

По Ρ…ΠΎΠ΄Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ»: установлСн Π½Π°Π±ΠΎΡ€ скан-ΠΊΠΎΠ΄ΠΎΠ² Set2, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ клавиш Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° ΠΈ Ρ‚. Π΄.

Π’Π°Π±Π»ΠΈΡ†Π° скан-ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹:


KeyMake (HEX)Break (HEX)
Num Lock45C5
Num DivideE0 35E0 B5
Num Multiply37B7
Num Minus4ACA
Num Plus4ECE
Num EnterE0 1CE0 9C
Num Dot53D3
Num 052D2
Num 14FCF
Num 250D0
Num 351D1
Num 44BCB
Num 54CCC
Num 64DCD
Num 747C7
Num 848C8
Num 949C9
Print ScreenE0 2A E0 37E0 B7 E0 AA
Scroll Lock46C6
PauseE1 1D 45 E1 9D C5
InsertE0 2A E0 52E0 D2 E0 AA
HomeE0 2A E0 47E0 C7 E0 AA
Page UpE0 2A E0 49E0 C9 E0 AA
DeleteE0 2A E0 53E0 D3 E0 AA
EndE0 2A E0 4FE0 CF E0 AA
Page DownE0 2A E0 51E0 D1 E0 AA
Arrow UpE0 2A E0 48E0 C8 E0 AA
Arrow LeftE0 2A E0 4BE0 CB E0 AA
Arrow DownE0 2A E0 50E0 D0 E0 AA
Arrow RightE0 2A E0 4DE0 CD E0 AA
PowerE0 5EE0 DE
SleepE0 5FE0 DF
Wake UpE0 63E0 E3
Esc0181
F13BBB
F23CBC
F33DBD
F43EBE
F53FBF
F640C0
F741C1
F842C2
F943C3
F1044C4
F1157D7
F1258D8
Tab0F8F
Caps Lock3ABA
Shift Left2AAA
Shift Right36B6
Ctrl Left1D9D
Ctrl RightE0 1DE0 9D
Alt Left38B8
Alt RightE0 38E0 B8
Win LeftE0 5BE0 DB
Win RightE0 5CE0 DC
ApplicationsE0 5DE0 DD
Space39B9
Enter1C9C
Back Space0E8E
10282
20383
30484
40585
50686
60787
70888
80989
90A8A
00B8B
Q1090
W1191
E1292
R1393
T1494
Y1595
U1696
I1797
O1898
P1999
A1E9E
S1F9F
D20A0
F21A1
G22A2
H23A3
J24A4
K25A5
L26A6
Z2CAC
X2DAD
C2EAE
V2FAF
B30B0
N31B1
M32B2
29A9
0C8C
=0D8D
\2BAB
[1A9A
]1B9B
;27A7
«28A8
34B4
?35B5
ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Если ΠΏΠΎΠ²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ скан-ΠΊΠΎΠ΄Ρƒ клавиши Pause (E1 1D 45 E1 9D C5), ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 3 Π±Π°ΠΉΡ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Make-ΠΊΠΎΠ΄ΠΎΠΌ, Π° Π²Ρ‚ΠΎΡ€Ρ‹Π΅ Break-ΠΊΠΎΠ΄ΠΎΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΏΡ€ΠΈ Π΅Ρ‘ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сразу ΠΆΠ΅ ΠΈ ΠΊΠΎΠ΄ наТатия ΠΈ отТатия. Π’ дальнСйшСм это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ упростит Π½Π°ΠΌ Тизнь.

Если Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‘, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ врСмя, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°, скан-ΠΊΠΎΠ΄ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ клавиши Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ с частотой Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скан-ΠΊΠΎΠ΄Ρ‹ содСрТат Π΄Π²Π° Π±Π°ΠΉΡ‚Π° вмСсто Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…. НапримСр, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΏΡ€ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ ΠΈ отпускании клавиши Page Up (E0 2A E0 49) выглядит Ρ‚Π°ΠΊ: E0 2A E0 49 E0 49 E0 49 E0 49 E0 49 E0 49 E0 49 E0 C9 E0 AA. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ отпускании клавиши с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Π° – ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (E0 AA) ΠΈΠ΄Ρ‘Ρ‚ Π² ΠΊΠΎΠ½Ρ†Π΅, Π° Π½Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ скан-ΠΊΠΎΠ΄ΠΎΠ² заняты ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ клавишами (ΠΈ, соотвСтствСнно, Π½Π°ΠΌΠΈ):

ВсСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ скан-ΠΊΠΎΠ΄Π°ΠΌ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚ 0x0E, Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ – ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ 0xE0, 0x2A, 0xE0.

Если Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Π»ΠΎΠ±, Ρ‚ΠΎ придётся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. А Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ с послСдними Π±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² (ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния), Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ отпускании ΠΈΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠΈ, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π±Π°ΠΉΡ‚ Π² скан-ΠΊΠΎΠ΄Π΅, имССтся Π΅Ρ‰Ρ‘ ΠΈ Pause, Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° клавиша Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°, становится Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ просто. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ всС эти аспСкты ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΊΡƒΡ‡Π΅ΠΉ Π½Π΅ΡƒΠ΄ΠΎΠ±ΠΎΠ²Π°Ρ€ΠΈΠΌΡ‹Ρ… Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ.

ЧСстно говоря, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ, Ρ‡Π΅ΠΌ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, создавая Ρ‚Π°ΠΊΠΎΠΉ бСспорядок. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΡƒΡΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ всё это Π±Π΅Π·ΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ привСсти Π² Π±ΠΎΠ»Π΅Π΅ простой ΠΈ красивый Π²ΠΈΠ΄.

Для информирования ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ скан-ΠΊΠΎΠ΄ являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ значСния 0xE0, 0x2A/0xAA ΠΈ 0xE1 для Pause. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эти значСния Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· клавиш – ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΡƒΡŽ/ΠΎΡ‚ΠΆΠ°Ρ‚ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π’Π²Π΅Π΄Ρ‘ΠΌ понятиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ клавиши – это Π½ΠΎΠΌΠ΅Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ клавиши. НапримСр: Ctrl исполнСн Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ… физичСских клавиш, Π½ΠΎ ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ – ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅.

ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π–Π”Π•ΠΠ˜Π•

Мои опрСдСлСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… клавиш нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Windows, хотя ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Π½ΠΈΡ….

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ трансляции скан-ΠΊΠΎΠ΄ΠΎΠ² Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ клавиши, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· 256 элСмСнтов ΠΏΠΎ 2 Π±Π°ΠΉΡ‚Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сам Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ клавиши, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ – Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

Если Π±Ρ‹ всС ΠΊΠΎΠ΄Ρ‹ состояли ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ ΠΏΠΎ младшим сСми разрядам значСния этого Π±Π°ΠΉΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для большСй части клавиш это условиС выполняСтся, ΠΈ ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ свСсти ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ: ΠΎΠ±Π½ΡƒΠ»ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС индСкса Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ трансляции, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ находится Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ клавиши нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, наТимаСтся ΠΎΠ½Π° ΠΈΠ»ΠΈ отТимаСтся.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ обнуляСм ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд, всС значСния Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ [128 – 255] Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ трансляции свободны для Π½Π°ΡˆΠΈΡ… Π½ΡƒΠΆΠ΄. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… клавиш ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. ΠŸΠΎΡΡ‚ΡƒΠΏΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Ссли скан-ΠΊΠΎΠ΄ являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (Pause ΠΏΠΎΠΊΠ° отбросим), Ρ‚ΠΎ установим Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд Π² Π΅Π³ΠΎ послСднСм Π±Π°ΠΉΡ‚Π΅.

Всё ослоТняСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π° ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ лишь ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚ скан-ΠΊΠΎΠ΄Π°, ΠΈ Ρ‚Π°ΠΊ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд послСднСго Π±Π°ΠΉΡ‚Π° Π½Π΅ удастся.

Начнём с рассмотрСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… клавиш. ВсС ΠΎΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π±Π°ΠΉΡ‚Π° 0xE0. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Ссли Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ трансляции, Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² ΠΈ скан-ΠΊΠΎΠ΄ Π΅Ρ‰Ρ‘ Π½Π΅ принят ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. ΠžΡ‚Π±Ρ€ΠΎΡΠΈΠ² ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд Ρƒ 0xE0, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x60 (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ клавишСй), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС индСкса, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ прСрывания ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ послСдний Π±Π°ΠΉΡ‚ скан-ΠΊΠΎΠ΄Π°, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд. ΠŸΡ€ΠΎΡ‰Π΅ всСго это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π² ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ прСобразования. Вспомним ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас имССтся Π΅Ρ‰Ρ‘ ΠΈ Π±Π°ΠΉΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ задСйствован. НовоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ значСния ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ индСкса Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ разряд Π±Π°ΠΉΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ опрСдСлимся, ΠΊΠ°ΠΊΠΎΠΉ разряд ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ индСкс. Как я ΡƒΠΆΠ΅ сказал, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ самый ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ всё ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ красиво: ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², взятый ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, пСрСносится Π² ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всё Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ клавиши Ctrl Right (E0 1D):

Назовём ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π±Π°ΠΉΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², KeyInfo. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π±Π°ΠΉΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0xE0. ΠžΠ±Π½ΡƒΠ»ΡΠ΅ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 0x60. Π‘Π΅Ρ€Ρ‘ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд Π±Π°ΠΉΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ KeyInfo ΠΈ пСрСносим Π΅Π³ΠΎ Π² ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ индСкса: (0xE0 & 0x7F) | ((KeyInfo >> 8) & 0x80). Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ индСкс 0x60, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π±Π°ΠΉΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² с установлСнным ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ разрядом: KeyInfo = 0x8000. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 0x1D: KeyInfo = Table[(0x1D & 0x7F) | ((KeyInfo >> 8) & 0x80)] == 0x9D – Π²ΠΎΡ‚ ΠΌΡ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π•Π΄Π΅ΠΌ дальшС – Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 2 Π±Π°ΠΉΡ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0xE0, 0x2A. Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΈΡ… ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ»Π° получСния индСкса. ПослС получСния 0xE0 Π±Π°ΠΉΡ‚ 0x2A прСвратится Π² индСкс 0xAA, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ², ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ разряд ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±Π°ΠΉΡ‚Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ (ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ вовсС Π½Π΅ Π±Ρ‹Π»ΠΎ). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 2 Π±Π°ΠΉΡ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ скан-ΠΊΠΎΠ΄Π°, ΠΈ для ΠΈΡ… ΠΏΡ€ΠΈΡ‘ΠΌΠ° ΡƒΠΆΠ΅ всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Всё Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ 2 Π±Π°ΠΉΡ‚ вмСсто 4 ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС слСдования ΠΏΠ°Ρ€ ΠΏΡ€ΠΈ отпускании. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΏΡ€ΠΈ отпускании ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 2 Π±Π°ΠΉΡ‚Π° Π΄Π°Π΄ΡƒΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ΠΆΠ°Ρ‚ΠΎΠΉ клавиши, Π° послСдниС 2 (E0 AA) Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² 0x0000 (ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹).

Но ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΆΠ΅, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°Π±Ρ‹Π»ΠΈ, ΠΌΡ‹ отбросили ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Pause (E1 1D 45) – Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ разбСрёмся ΠΈ с Π½Π΅ΠΉ. Если ΠΏΠΎΠΉΡ‚ΠΈ ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, ΠΈ ΠΏΠΎ индСксу 0x61 (0xE1 & 0x7F) Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x8000, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ коллизию, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΏΡ€Π°Π²Ρ‹ΠΌ Ctrl’ом (E0 1D). Π§Ρ‚ΠΎ ΠΆΠ΅ Π½Π°ΠΌ Π² этом случаС Π΄Π΅Π»Π°Ρ‚ΡŒ? Ну Ρ‡Ρ‚ΠΎ ΠΆ, Π±ΡƒΠ΄Π΅ΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ получСния индСкса: посмотрим Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС числа 0x1D – 0001 1101. Π§Ρ‚ΠΎΠ± Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 5-ΠΉ, 6-ΠΉ, ΠΈΠ»ΠΈ ΠΎΠ±Π° разряда вмСстС, ΠΈΠ»ΠΈ 7-ΠΉ ΠΈ 1-ΠΉ, Π½ΠΎ Ρ€Π°Π· ΡƒΠΆ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ разряды, Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ. НовоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ получСния индСкса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ: (Value & 0x7F) | ((KeyInfo >> 8) & 0xC0). Но Π½Π° этом наши мучСния с клавишСй Pause Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈΡΡŒ. По индСксу 0x61 Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ KeyInfo = 0x4000 (Π½Π΅ 0xC000, Ρ‡Ρ‚ΠΎΠ± Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ с Applications (E0 5D)), ΠΈ, слСдуя Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ: (1D & 0x7F) | ((KeyInfo >> 8) & 0xC0) == 0x5D. Но, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ΄ Pause состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Π±Π°ΠΉΡ‚, Ρ‚ΠΎ ΠΏΠΎ этому индСксу Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ – ΠΈ ΠΎ Π±Π»Π°Π³ΠΎ: Ссли Π²Π·ΡΡ‚ΡŒ 0x8000, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, ΠΈ ΠΏΠΎ индСксу 0xC5 Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Pause.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ KeyInfo измСняСтся послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ принятого Π±Π°ΠΉΡ‚Π°, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ скан-ΠΊΠΎΠ΄Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ принятого Π±Π°ΠΉΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Если ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, Ρ‚ΠΎ ΠΏΠΎ Π½Π΅ΠΌΡƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ разряды ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ (ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ Π² ноль) ΠΈ ΡƒΠΆΠ΅ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ находится Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ KeyInfo.

Π’Π°Π±Π»ΠΈΡ†Π° трансляции:


KeyIndex (HEX)Virtual KeyAttributeComment
00VK_UNKNOWN
Esc01VK_ESCAPE
102VK_1
203VK_2
304VK_3
405VK_4
506VK_5
607VK_6
708VK_7
809VK_8
90AVK_9
00BVK_0
0CVK_OEM_MINUS
=0DVK_OEM_PLUS
Back Space0EVK_BACK
Tab0FVK_TAB
Q10VK_Q
W11VK_W
E12VK_E
R13VK_R
T14VK_T
Y15VK_Y
U16VK_U
I17VK_I
O18VK_O
P19VK_P
[1AVK_OEM_4
]1BVK_OEM_6
Enter1CVK_RETURN
Ctrl Left1DVK_CONTROL
A1EVK_A
S1FVK_S
D20VK_D
F21VK_F
G22VK_G
H23VK_H
J24VK_J
K25VK_K
L26VK_L
;27VK_OEM_1
«28VK_OEM_7
29VK_OEM_3
Shift Left2AVK_SHIFT
\2BVK_OEM_5
Z2CVK_Z
X2DVK_X
C2EVK_C
V2FVK_V
B30VK_B
N31VK_N
M32VK_M
34VK_OEM_PERIOD
?35VK_OEM_2
Shift Right36VK_SHIFTRIGHT
Num Multiply37VK_MULTIPLY
Alt Left38VK_MENU
Space39VK_SPACE
Caps Lock3AVK_CAPITAL
F13BVK_F1
F23CVK_F2
F33DVK_F3
F43EVK_F4
F53FVK_F5
F640VK_F6
F741VK_F7
F842VK_F8
F943VK_F9
F1044VK_F10
Num Lock45VK_NUMLOCK
Scroll Lock46VK_SCROLL
Num 747VK_NUMPAD7
Num 848VK_NUMPAD8
Num 949VK_NUMPAD9
Num Minus4AVK_SUBTRACT
Num 44BVK_NUMPAD4
Num 54CVK_NUMPAD5
Num 64DVK_NUMPAD6
Num Plus4EVK_ADD
Num 14FVK_NUMPAD1
Num 250VK_NUMPAD2
Num 351VK_NUMPAD3
Num 052VK_NUMPAD0
Num Dot53VK_DECIMAL
54VK_UNKNOWN
55VK_UNKNOWN
56VK_UNKNOWN
F1157VK_F11
F1258VK_F12
59VK_UNKNOWN
5AVK_UNKNOWN
5BVK_UNKNOWN
5CVK_UNKNOWN
5DEXTENDPause (E1 1D)
5EVK_UNKNOWN
5FVK_UNKNOWN
60EXTENDExtended (E0)
61PAUSE_EXTENDPause (E1)
62VK_UNKNOWN
63VK_UNKNOWN
64VK_UNKNOWN
65VK_UNKNOWN
66VK_UNKNOWN
67VK_UNKNOWN
68VK_UNKNOWN
69VK_UNKNOWN
6AVK_UNKNOWN
6BVK_UNKNOWN
6CVK_UNKNOWN
6DVK_UNKNOWN
6EVK_UNKNOWN
6FVK_UNKNOWN
70VK_UNKNOWN
71VK_UNKNOWN
72VK_UNKNOWN
73VK_UNKNOWN
74VK_UNKNOWN
75VK_UNKNOWN
76VK_UNKNOWN
77VK_UNKNOWN
78VK_UNKNOWN
79VK_UNKNOWN
7AAcknowledge (FA)
7BVK_UNKNOWN
7CVK_UNKNOWN
7DVK_UNKNOWN
7EVK_UNKNOWN
7FVK_UNKNOWN
80VK_UNKNOWN
81VK_UNKNOWN
82VK_UNKNOWN
83VK_UNKNOWN
84VK_UNKNOWN
85VK_UNKNOWN
86VK_UNKNOWN
87VK_UNKNOWN
88VK_UNKNOWN
89VK_UNKNOWN
8AVK_UNKNOWN
8BVK_UNKNOWN
8CVK_UNKNOWN
8DVK_UNKNOWN
8EVK_UNKNOWN
8FVK_UNKNOWN
90VK_UNKNOWN
91VK_UNKNOWN
92VK_UNKNOWN
93VK_UNKNOWN
94VK_UNKNOWN
95VK_UNKNOWN
96VK_UNKNOWN
97VK_UNKNOWN
98VK_UNKNOWN
99VK_UNKNOWN
9AVK_UNKNOWN
9BVK_UNKNOWN
Num Enter9CVK_RETURNRIGHT
Ctrl Right9DVK_CONTROLRIGHT
9EVK_UNKNOWN
9FVK_UNKNOWN
A0VK_UNKNOWN
A1VK_UNKNOWN
A2VK_UNKNOWN
A3VK_UNKNOWN
A4VK_UNKNOWN
A5VK_UNKNOWN
A6VK_UNKNOWN
A7VK_UNKNOWN
A8VK_UNKNOWN
A9VK_UNKNOWN
AAAdditional (E0 2A)
ABVK_UNKNOWN
ACVK_UNKNOWN
ADVK_UNKNOWN
AEVK_UNKNOWN
AFVK_UNKNOWN
B0VK_UNKNOWN
B1VK_UNKNOWN
B2VK_UNKNOWN
B3VK_UNKNOWN
B4VK_UNKNOWN
Num DivideB5VK_DIVIDE
B6VK_UNKNOWN
Print ScreenB7VK_SNAPSHOT
Alt RightB8VK_MENURIGHT
B9VK_UNKNOWN
BAVK_UNKNOWN
BBVK_UNKNOWN
BCVK_UNKNOWN
BDVK_UNKNOWN
BEVK_UNKNOWN
BFVK_UNKNOWN
C0VK_UNKNOWN
C1VK_UNKNOWN
C2VK_UNKNOWN
C3VK_UNKNOWN
C4VK_UNKNOWN
PauseC5VK_PAUSE
C6VK_UNKNOWN
HomeC7VK_HOME
Arrow UpC8VK_UP
Page UpC9VK_PRIOR
CAVK_UNKNOWN
Arrow LeftCBVK_LEFT
CCVK_UNKNOWN
Arrow RightCDVK_RIGHT
CEVK_UNKNOWN
EndCFVK_END
Arrow DownD0VK_DOWN
Page DownD1VK_NEXT
InsertD2VK_INSERT
DeleteD3VK_DELETE
D4VK_UNKNOWN
D5VK_UNKNOWN
D6VK_UNKNOWN
D7VK_UNKNOWN
D8VK_UNKNOWN
D9VK_UNKNOWN
DAVK_UNKNOWN
Win LeftDBVK_WIN
Win RightDCVK_WINRIGHT
ApplicationsDDVK_APPS
PowerDEVK_POWER
SleepDFVK_SLEEP
E0VK_UNKNOWN
E1VK_UNKNOWN
E2VK_UNKNOWN
Wake UpE3VK_WAKEUP
E4VK_UNKNOWN
E5VK_UNKNOWN
E6VK_UNKNOWN
E7VK_UNKNOWN
E8VK_UNKNOWN
E9VK_UNKNOWN
EAVK_UNKNOWN
EBVK_UNKNOWN
ECVK_UNKNOWN
EDVK_UNKNOWN
EEVK_UNKNOWN
EFVK_UNKNOWN
F0VK_UNKNOWN
F1VK_UNKNOWN
F2VK_UNKNOWN
F3VK_UNKNOWN
F4VK_UNKNOWN
F5VK_UNKNOWN
F6VK_UNKNOWN
F7VK_UNKNOWN
F8VK_UNKNOWN
F9VK_UNKNOWN
FAVK_UNKNOWN
FBVK_UNKNOWN
FCVK_UNKNOWN
FDVK_UNKNOWN
FEVK_UNKNOWN
FFVK_UNKNOWN
ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π–Π”Π•ΠΠ˜Π•

По индСксу 0x7A хранится Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для игнорирования ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½ΠΎ это Π½Π΅ СдинствСнный Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, ΠΈ всС ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ удастся. Но эта Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅ просто, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ посылкС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ прСрывания Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ опросу, ΠΈΠ»ΠΈ завСсти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° послана ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ скан-ΠΊΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Π‘ трансляциСй ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ задСйствуСм Π΅Ρ‰Ρ‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ разряды Π±Π°ΠΉΡ‚Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НапримСр, Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² 0-ΠΌ разрядС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ отпускания клавиши – ΠΏΡ€ΠΈ ΠΎΡ‚ΠΆΠ°Ρ‚ΠΈΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ опрСдСляСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ клавиши, Π° Π½Π΅ Π΅Ρ‘ физичСскоС располоТСниС. Но ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ эта информация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, 1-ΠΉ разряд Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ клавиша являСтся ΠΏΡ€Π°Π²ΠΎΠΉ.

Π’ тСстовом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ прСрывания (Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½Π΅Ρ‚), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΈΠ»ΠΈ отпускании клавиши Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ с ΠΊΠ°ΠΊΠΎΠΉ клавишСй ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *

Π‘ΠžΠ’Π•Π’

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ самих Ρ‚Π°Π±Π»ΠΈΡ† вынСсСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (TrnslTbl.inc, NamesTbl.inc) Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сами объявлСния, вслСдствиС Ρ‡Π΅Π³ΠΎ упрощаСтся ΠΈΡ… модификация, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½Π°ΠΌ понадобится ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° 0xFE, Ρ‚ΠΎ ΠΌΡ‹ просто ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π½Π° строку 255 ΠΈ сдСлаСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния.

P. S. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΠ²Π½Π°Ρ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ°, исправлСния ΠΈ дополнСния ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ