Ignore:
Timestamp:
Oct 24, 2001, 1:18:19 PM (24 years ago)
Author:
phaller
Message:

.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/winkeyboard.cpp

    r7166 r7187  
    1 /* $Id: winkeyboard.cpp,v 1.18 2001-10-23 08:36:20 phaller Exp $ */
     1/* $Id: winkeyboard.cpp,v 1.19 2001-10-24 11:18:19 phaller Exp $ */
    22/*
    33 * Win32 <-> PM key translation
     
    308308                               };
    309309
    310 BYTE abWinVKeyToPMScan[256] =
    311 /****************************************/
    312 /* Vkey                   *    Scancode */
    313 /****************************************/
    314 /* 0x00                   */ { 0x00
    315 /* 0x01 VK_LBUTTON        */ , 0x00
    316 /* 0x02 VK_RBUTTON        */ , 0x00
    317 /* 0x03 VK_CANCEL         */ , PMSCAN_BREAK
    318 /* 0x04 VK_MBUTTON        */ , 0x00
    319 /* 0x05                   */ , 0x00
    320 /* 0x06                   */ , 0x00
    321 /* 0x07                   */ , 0x00
    322 /* 0x08 VK_BACK           */ , PMSCAN_BACKSPACE
    323 /* 0x09 VK_TAB            */ , PMSCAN_TAB
    324 /* 0x0A                   */ , 0x00
    325 /* 0x0B                   */ , 0x00
    326 /* 0x0C VK_CLEAR          */ , PMSCAN_PAD5
    327 /* 0x0D VK_RETURN         */ , PMSCAN_ENTER
    328 /* 0x0E                   */ , 0x00
    329 /* 0x0F                   */ , 0x00
    330 /* 0x10 VK_SHIFT          */ , PMSCAN_SHIFTLEFT
    331 /* 0x11 VK_CONTROL        */ , PMSCAN_CTRLLEFT
    332 /* 0x12 VK_MENU           */ , PMSCAN_ALTLEFT
    333 /* 0x13 VK_PAUSE          */ , PMSCAN_PAUSE
    334 /* 0x14 VK_CAPITAL        */ , PMSCAN_CAPSLOCK
    335 /* 0x15                   */ , 0x00
    336 /* 0x16                   */ , 0x00
    337 /* 0x17                   */ , 0x00
    338 /* 0x18                   */ , 0x00
    339 /* 0x19                   */ , 0x00
    340 /* 0x1A                   */ , 0x00
    341 /* 0x1B VK_ESCAPE         */ , PMSCAN_ESC
    342 /* 0x1C                   */ , 0x00
    343 /* 0x1D                   */ , 0x00
    344 /* 0x1E                   */ , 0x00
    345 /* 0x1F                   */ , 0x00
    346 /* 0x20 VK_SPACE          */ , PMSCAN_SPACE
    347 /* 0x21 VK_PRIOR          */ , PMSCAN_PAGEUP
    348 /* 0x22 VK_NEXT           */ , PMSCAN_PAGEDOWN
    349 /* 0x23 VK_END            */ , PMSCAN_END
    350 /* 0x24 VK_HOME           */ , PMSCAN_HOME
    351 /* 0x25 VK_LEFT           */ , PMSCAN_LEFT
    352 /* 0x26 VK_UP             */ , PMSCAN_UP
    353 /* 0x27 VK_RIGHT          */ , PMSCAN_RIGHT
    354 /* 0x28 VK_DOWN           */ , PMSCAN_DOWN
    355 /* 0x29 VK_SELECT         */ , 0x00
    356 /* 0x2A VK_PRINT          */ , PMSCAN_PRINT
    357 /* 0x2B VK_EXECUTE        */ , 0x00
    358 /* 0x2C VK_SNAPSHOT       */ , 0x00
    359 /* 0x2D VK_INSERT         */ , PMSCAN_INSERT
    360 /* 0x2E VK_DELETE         */ , PMSCAN_DELETE
    361 /* 0x2F VK_HELP           */ , PMSCAN_HELP
    362 /* 0x30 VK_0              */ , PMSCAN_ZERO
    363 /* 0x31 VK_1              */ , PMSCAN_ONE
    364 /* 0x32 VK_2              */ , PMSCAN_TWO
    365 /* 0x33 VK_3              */ , PMSCAN_THREE
    366 /* 0x34 VK_4              */ , PMSCAN_FOUR
    367 /* 0x35 VK_5              */ , PMSCAN_FIVE
    368 /* 0x36 VK_6              */ , PMSCAN_SIX
    369 /* 0x37 VK_7              */ , PMSCAN_SEVEN
    370 /* 0x38 VK_8              */ , PMSCAN_EIGHT
    371 /* 0x39 VK_9              */ , PMSCAN_NINE
    372 /* 0x3A                   */ , 0x00
    373 /* 0x3B                   */ , 0x00
    374 /* 0x3C                   */ , 0x00
    375 /* 0x3D                   */ , 0x00
    376 /* 0x3E                   */ , 0x00
    377 /* 0x3F                   */ , 0x00
    378 /* 0x40                   */ , 0x00
    379 /* 0x41 VK_A              */ , PMSCAN_A
    380 /* 0x42 VK_B              */ , PMSCAN_B
    381 /* 0x43 VK_C              */ , PMSCAN_C
    382 /* 0x44 VK_D              */ , PMSCAN_D
    383 /* 0x45 VK_E              */ , PMSCAN_E
    384 /* 0x46 VK_F              */ , PMSCAN_F
    385 /* 0x47 VK_G              */ , PMSCAN_G
    386 /* 0x48 VK_H              */ , PMSCAN_H
    387 /* 0x49 VK_I              */ , PMSCAN_I
    388 /* 0x4A VK_J              */ , PMSCAN_J
    389 /* 0x4B VK_K              */ , PMSCAN_K
    390 /* 0x4C VK_L              */ , PMSCAN_L
    391 /* 0x4D VK_M              */ , PMSCAN_M
    392 /* 0x4E VK_N              */ , PMSCAN_N
    393 /* 0x4F VK_O              */ , PMSCAN_O
    394 /* 0x50 VK_P              */ , PMSCAN_P
    395 /* 0x51 VK_Q              */ , PMSCAN_Q
    396 /* 0x52 VK_R              */ , PMSCAN_R
    397 /* 0x53 VK_S              */ , PMSCAN_S
    398 /* 0x54 VK_T              */ , PMSCAN_T
    399 /* 0x55 VK_U              */ , PMSCAN_U
    400 /* 0x56 VK_V              */ , PMSCAN_V
    401 /* 0x57 VK                */ , PMSCAN_W
    402 /* 0x58 VK_X              */ , PMSCAN_X
    403 /* 0x59 VK_Y              */ , PMSCAN_Y
    404 /* 0x5A VK_Z              */ , PMSCAN_Z
    405 /* 0x5B VK_LWIN           */ , PMSCAN_WINLEFT
    406 /* 0x5C VK_RWIN           */ , PMSCAN_WINRIGHT
    407 /* 0x5D VK_APPS           */ , PMSCAN_APPLICATION
    408 /* 0x5E                   */ , 0x00
    409 /* 0x5F                   */ , 0x00
    410 /* 0x60 VK_NUMPAD0        */ , PMSCAN_PAD0
    411 /* 0x61 VK_NUMPAD1        */ , PMSCAN_PAD1
    412 /* 0x62 VK_NUMPAD2        */ , PMSCAN_PAD2
    413 /* 0x63 VK_NUMPAD3        */ , PMSCAN_PAD3
    414 /* 0x64 VK_NUMPAD4        */ , PMSCAN_PAD4
    415 /* 0x65 VK_NUMPAD5        */ , PMSCAN_PAD5
    416 /* 0x66 VK_NUMPAD6        */ , PMSCAN_PAD6
    417 /* 0x67 VK_NUMPAD7        */ , PMSCAN_PAD7
    418 /* 0x68 VK_NUMPAD8        */ , PMSCAN_PAD8
    419 /* 0x69 VK_NUMPAD9        */ , PMSCAN_PAD9
    420 /* 0x6A VK_MULTIPLY       */ , PMSCAN_PADASTERISK
    421 /* 0x6B VK_ADD            */ , PMSCAN_PADPLUS
    422 /* 0x6C VK_SEPARATOR      */ , 0x00
    423 /* 0x6D VK_SUBTRACT       */ , PMSCAN_PADMINUS
    424 /* 0x6E VK_DECIMAL        */ , PMSCAN_PADPERIOD
    425 /* 0x6F VK_DIVIDE         */ , PMSCAN_PADSLASH
    426 /* 0x70 VK_F1             */ , PMSCAN_F1
    427 /* 0x71 VK_F2             */ , PMSCAN_F2
    428 /* 0x72 VK_F3             */ , PMSCAN_F3
    429 /* 0x73 VK_F4             */ , PMSCAN_F4
    430 /* 0x74 VK_F5             */ , PMSCAN_F5
    431 /* 0x75 VK_F6             */ , PMSCAN_F6
    432 /* 0x76 VK_F7             */ , PMSCAN_F7
    433 /* 0x77 VK_F8             */ , PMSCAN_F8
    434 /* 0x78 VK_F9             */ , PMSCAN_F9
    435 /* 0x79 VK_F10            */ , PMSCAN_F10
    436 /* 0x7A VK_F11            */ , PMSCAN_F11
    437 /* 0x7B VK_F12            */ , PMSCAN_F12
    438 /* 0x7C VK_F13            */ , PMSCAN_F13
    439 /* 0x7D VK_F14            */ , PMSCAN_F14
    440 /* 0x7E VK_F15            */ , PMSCAN_F15
    441 /* 0x7F VK_F16            */ , PMSCAN_F16
    442 /* 0x80 VK_F17            */ , PMSCAN_F17
    443 /* 0x81 VK_F18            */ , PMSCAN_F18
    444 /* 0x82 VK_F19            */ , PMSCAN_F19
    445 /* 0x83 VK_F20            */ , PMSCAN_F20
    446 /* 0x84 VK_F21            */ , PMSCAN_F21
    447 /* 0x85 VK_F22            */ , PMSCAN_F22
    448 /* 0x86 VK_F23            */ , PMSCAN_F23
    449 /* 0x87 VK_F24            */ , PMSCAN_F24
    450 /* 0x88                   */ , 0x00
    451 /* 0x89                   */ , 0x00
    452 /* 0x8A                   */ , 0x00
    453 /* 0x8B                   */ , 0x00
    454 /* 0x8C                   */ , 0x00
    455 /* 0x8D                   */ , 0x00
    456 /* 0x8E                   */ , 0x00
    457 /* 0x8F                   */ , 0x00
    458 /* 0x90 VK_NUMLOCK        */ , PMSCAN_NUMLOCK
    459 /* 0x91 VK_SCROLL         */ , PMSCAN_SCROLLLOCK
    460 /* 0x92                   */ , 0x00
    461 /* 0x93                   */ , 0x00
    462 /* 0x94                   */ , 0x00
    463 /* 0x95                   */ , 0x00
    464 /* 0x96                   */ , 0x00
    465 /* 0x97                   */ , 0x00
    466 /* 0x98                   */ , 0x00
    467 /* 0x99                   */ , 0x00
    468 /* 0x9A                   */ , 0x00
    469 /* 0x9B                   */ , 0x00
    470 /* 0x9C                   */ , 0x00
    471 /* 0x9D                   */ , 0x00
    472 /* 0x9E                   */ , 0x00
    473 /* 0x9F                   */ , 0x00
    474 /* 0xA0 VK_LSHIFT         */ , PMSCAN_SHIFTLEFT
    475 /* 0xA1 VK_RSHIFT         */ , PMSCAN_SHIFTRIGHT
    476 /* 0xA2 VK_LCONTROL       */ , PMSCAN_CTRLLEFT
    477 /* 0xA3 VK_RCONTROL       */ , PMSCAN_CTRLRIGHT
    478 /* 0xA4 VK_LMENU          */ , PMSCAN_ALTLEFT
    479 /* 0xA5 VK_RMENU          */ , PMSCAN_ALTRIGHT
    480 /* 0xA6                   */ , 0x00
    481 /* 0xA7                   */ , 0x00
    482 /* 0xA8                   */ , 0x00
    483 /* 0xA9                   */ , 0x00
    484 /* 0xAA                   */ , 0x00
    485 /* 0xAB                   */ , 0x00
    486 /* 0xAC                   */ , 0x00
    487 /* 0xAD                   */ , 0x00
    488 /* 0xAE                   */ , 0x00
    489 /* 0xAF                   */ , 0x00
    490 /* 0xB0                   */ , 0x00
    491 /* 0xB1                   */ , 0x00
    492 /* 0xB2                   */ , 0x00
    493 /* 0xB3                   */ , 0x00
    494 /* 0xB4                   */ , 0x00
    495 /* 0xB5                   */ , 0x00
    496 /* 0xB6                   */ , 0x00
    497 /* 0xB7                   */ , 0x00
    498 /* 0xB8                   */ , 0x00
    499 /* 0xB9                   */ , 0x00
    500 /* 0xBA VK_SEMICOLON      */ , PMSCAN_SEMICOLON
    501 /* 0xBB VK_EQUAL          */ , PMSCAN_EQUAL
    502 /* 0xBC VK_COMMA          */ , PMSCAN_COMMA
    503 /* 0xBD VK_HYPHEN         */ , PMSCAN_HYPHEN
    504 /* 0xBE VK_PERIOD         */ , PMSCAN_PERIOD
    505 /* 0xBF VK_SLASH          */ , PMSCAN_SLASH
    506 /* 0xC0 VK_GRAVE          */ , PMSCAN_GRAVE
    507 /* 0xC1 VK_FFC1           */ , PMSCAN_JEXTRA
    508 /* 0xC2 VK_YEN            */ , PMSCAN_YEN
    509 /* 0xC3                   */ , 0x00
    510 /* 0xC4                   */ , 0x00
    511 /* 0xC5                   */ , 0x00
    512 /* 0xC6                   */ , 0x00
    513 /* 0xC7                   */ , 0x00
    514 /* 0xC8                   */ , 0x00
    515 /* 0xC9                   */ , 0x00
    516 /* 0xCA                   */ , 0x00
    517 /* 0xCB                   */ , 0x00
    518 /* 0xCC                   */ , 0x00
    519 /* 0xCD                   */ , 0x00
    520 /* 0xCE                   */ , 0x00
    521 /* 0xCF                   */ , 0x00
    522 /* 0xD0                   */ , 0x00
    523 /* 0xD1                   */ , 0x00
    524 /* 0xD2                   */ , 0x00
    525 /* 0xD3                   */ , 0x00
    526 /* 0xD4                   */ , 0x00
    527 /* 0xD5                   */ , 0x00
    528 /* 0xD6                   */ , 0x00
    529 /* 0xD7                   */ , 0x00
    530 /* 0xD8                   */ , 0x00
    531 /* 0xD9                   */ , 0x00
    532 /* 0xDA                   */ , 0x00
    533 /* 0xDB VK_BRACKETLEFT    */ , PMSCAN_BRACKETLEFT
    534 /* 0xDC VK_BACKSLASH      */ , PMSCAN_BACKSLASH
    535 /* 0xDD VK_BRACKETRIGHT   */ , PMSCAN_BRACKETRIGHT
    536 /* 0xDE VK_QUOTESINGLE    */ , PMSCAN_QUOTESINGLE
    537 /* 0xDF                   */ , 0x00
    538 /* 0xE0                   */ , 0x00
    539 /* 0xE1                   */ , 0x00
    540 /* 0xE2 VK_EXTRA          */ , PMSCAN_EXTRA
    541 /* 0xE3                   */ , 0x00
    542 /* 0xE4                   */ , 0x00
    543 /* 0xE5                   */ , 0x00
    544 /* 0xE6                   */ , 0x00
    545 /* 0xE7                   */ , 0x00
    546 /* 0xE8                   */ , 0x00
    547 /* 0xE9                   */ , 0x00
    548 /* 0xEA                   */ , 0x00
    549 /* 0xEB                   */ , 0x00
    550 /* 0xEC                   */ , 0x00
    551 /* 0xED                   */ , 0x00
    552 /* 0xEE                   */ , 0x00
    553 /* 0xEF                   */ , 0x00
    554 /* 0xF0                   */ , 0x00
    555 /* 0xF1                   */ , 0x00
    556 /* 0xF2                   */ , 0x00
    557 /* 0xF3                   */ , 0x00
    558 /* 0xF4                   */ , 0x00
    559 /* 0xF5                   */ , 0x00
    560 /* 0xF6 VK_ATTN           */ , 0x00
    561 /* 0xF7 VK_CRSEL          */ , 0x00
    562 /* 0xF8 VK_EXSEL          */ , 0x00
    563 /* 0xF9 VK_EREOF          */ , PMSCAN_ERASEEOF
    564 /* 0xFA VK_PLAY           */ , 0x00
    565 /* 0xFB VK_ZOOM           */ , 0x00
    566 /* 0xFC VK_NONAME         */ , 0x00
    567 /* 0xFD VK_PA1            */ , PMSCAN_PA1
    568 /* 0xFE VK_OEM_CLEAR      */ , 0x00
    569 /* 0xFF                   */ , 0x00
     310typedef struct tagWinVKeyToPMScan
     311{
     312  /* index is the VKey value */
     313  BYTE  bPMScanCode;
     314  LPSTR lpstrName;
     315} WINVKEYTOPMSCAN, *PWINVKEYTOPMSCAN;
     316
     317WINVKEYTOPMSCAN abWinVKeyToPMScan[256] =
     318/**********************************************************************/
     319/* Vkey                   *    Scancode               * Name          */
     320/**********************************************************************/
     321/* 0x00                   */ { 0x00                   , NULL
     322/* 0x01 VK_LBUTTON        */ , 0x00                   , NULL
     323/* 0x02 VK_RBUTTON        */ , 0x00                   , NULL
     324/* 0x03 VK_CANCEL         */ , PMSCAN_BREAK           , "Break"
     325/* 0x04 VK_MBUTTON        */ , 0x00                   , NULL
     326/* 0x05                   */ , 0x00                   , NULL
     327/* 0x06                   */ , 0x00                   , NULL
     328/* 0x07                   */ , 0x00                   , NULL
     329/* 0x08 VK_BACK           */ , PMSCAN_BACKSPACE       , "Backspace"
     330/* 0x09 VK_TAB            */ , PMSCAN_TAB             , "Tab"
     331/* 0x0A                   */ , 0x00                   , NULL
     332/* 0x0B                   */ , 0x00                   , NULL
     333/* 0x0C VK_CLEAR          */ , PMSCAN_PAD5            , "Num 5"
     334/* 0x0D VK_RETURN         */ , PMSCAN_ENTER           , "Enter"
     335/* 0x0E                   */ , 0x00                   , NULL
     336/* 0x0F                   */ , 0x00                   , NULL
     337/* 0x10 VK_SHIFT          */ , PMSCAN_SHIFTLEFT       , "Left Shift"
     338/* 0x11 VK_CONTROL        */ , PMSCAN_CTRLLEFT        , "Left Control"
     339/* 0x12 VK_MENU           */ , PMSCAN_ALTLEFT         , "Left Alt"
     340/* 0x13 VK_PAUSE          */ , PMSCAN_PAUSE           , "Pause"
     341/* 0x14 VK_CAPITAL        */ , PMSCAN_CAPSLOCK        , "Caps Lock"
     342/* 0x15                   */ , 0x00                   , NULL
     343/* 0x16                   */ , 0x00                   , NULL
     344/* 0x17                   */ , 0x00                   , NULL
     345/* 0x18                   */ , 0x00                   , NULL
     346/* 0x19                   */ , 0x00                   , NULL
     347/* 0x1A                   */ , 0x00                   , NULL
     348/* 0x1B VK_ESCAPE         */ , PMSCAN_ESC             , "Escape"
     349/* 0x1C                   */ , 0x00                   , NULL
     350/* 0x1D                   */ , 0x00                   , NULL
     351/* 0x1E                   */ , 0x00                   , NULL
     352/* 0x1F                   */ , 0x00                   , NULL
     353/* 0x20 VK_SPACE          */ , PMSCAN_SPACE           , "Space"
     354/* 0x21 VK_PRIOR          */ , PMSCAN_PAGEUP          , "Page Up"
     355/* 0x22 VK_NEXT           */ , PMSCAN_PAGEDOWN        , "Page Down"
     356/* 0x23 VK_END            */ , PMSCAN_END             , "End"
     357/* 0x24 VK_HOME           */ , PMSCAN_HOME            , "Home"
     358/* 0x25 VK_LEFT           */ , PMSCAN_LEFT            , "Left"
     359/* 0x26 VK_UP             */ , PMSCAN_UP              , "Up"
     360/* 0x27 VK_RIGHT          */ , PMSCAN_RIGHT           , "Right"
     361/* 0x28 VK_DOWN           */ , PMSCAN_DOWN            , "Down"
     362/* 0x29 VK_SELECT         */ , 0x00                   , NULL
     363/* 0x2A VK_PRINT          */ , PMSCAN_PRINT           , "Print"
     364/* 0x2B VK_EXECUTE        */ , 0x00                   , NULL
     365/* 0x2C VK_SNAPSHOT       */ , 0x00                   , NULL
     366/* 0x2D VK_INSERT         */ , PMSCAN_INSERT          , "Insert"
     367/* 0x2E VK_DELETE         */ , PMSCAN_DELETE          , "Delete"
     368/* 0x2F VK_HELP           */ , PMSCAN_HELP            , "Help"
     369/* 0x30 VK_0              */ , PMSCAN_ZERO            , "0"
     370/* 0x31 VK_1              */ , PMSCAN_ONE             , "1"
     371/* 0x32 VK_2              */ , PMSCAN_TWO             , "2"
     372/* 0x33 VK_3              */ , PMSCAN_THREE           , "3"
     373/* 0x34 VK_4              */ , PMSCAN_FOUR            , "4"
     374/* 0x35 VK_5              */ , PMSCAN_FIVE            , "5"
     375/* 0x36 VK_6              */ , PMSCAN_SIX             , "6"
     376/* 0x37 VK_7              */ , PMSCAN_SEVEN           , "7"
     377/* 0x38 VK_8              */ , PMSCAN_EIGHT           , "8"
     378/* 0x39 VK_9              */ , PMSCAN_NINE            , "9"
     379/* 0x3A                   */ , 0x00                   , NULL
     380/* 0x3B                   */ , 0x00                   , NULL
     381/* 0x3C                   */ , 0x00                   , NULL
     382/* 0x3D                   */ , 0x00                   , NULL
     383/* 0x3E                   */ , 0x00                   , NULL
     384/* 0x3F                   */ , 0x00                   , NULL
     385/* 0x40                   */ , 0x00                   , NULL
     386/* 0x41 VK_A              */ , PMSCAN_A               , "A"
     387/* 0x42 VK_B              */ , PMSCAN_B               , "B"
     388/* 0x43 VK_C              */ , PMSCAN_C               , "C"
     389/* 0x44 VK_D              */ , PMSCAN_D               , "D"
     390/* 0x45 VK_E              */ , PMSCAN_E               , "E"
     391/* 0x46 VK_F              */ , PMSCAN_F               , "F"
     392/* 0x47 VK_G              */ , PMSCAN_G               , "G"
     393/* 0x48 VK_H              */ , PMSCAN_H               , "H"
     394/* 0x49 VK_I              */ , PMSCAN_I               , "I"
     395/* 0x4A VK_J              */ , PMSCAN_J               , "J"
     396/* 0x4B VK_K              */ , PMSCAN_K               , "K"
     397/* 0x4C VK_L              */ , PMSCAN_L               , "L"
     398/* 0x4D VK_M              */ , PMSCAN_M               , "M"
     399/* 0x4E VK_N              */ , PMSCAN_N               , "N"
     400/* 0x4F VK_O              */ , PMSCAN_O               , "O"
     401/* 0x50 VK_P              */ , PMSCAN_P               , "P"
     402/* 0x51 VK_Q              */ , PMSCAN_Q               , "Q"
     403/* 0x52 VK_R              */ , PMSCAN_R               , "R"
     404/* 0x53 VK_S              */ , PMSCAN_S               , "S"
     405/* 0x54 VK_T              */ , PMSCAN_T               , "T"
     406/* 0x55 VK_U              */ , PMSCAN_U               , "U"
     407/* 0x56 VK_V              */ , PMSCAN_V               , "V"
     408/* 0x57 VK                */ , PMSCAN_W               , "W"
     409/* 0x58 VK_X              */ , PMSCAN_X               , "X"
     410/* 0x59 VK_Y              */ , PMSCAN_Y               , "Y"
     411/* 0x5A VK_Z              */ , PMSCAN_Z               , "Z"
     412/* 0x5B VK_LWIN           */ , PMSCAN_WINLEFT         , "Left Win"
     413/* 0x5C VK_RWIN           */ , PMSCAN_WINRIGHT        , "Right Win"
     414/* 0x5D VK_APPS           */ , PMSCAN_APPLICATION     , "Application"
     415/* 0x5E                   */ , 0x00                   , NULL
     416/* 0x5F                   */ , 0x00                   , NULL
     417/* 0x60 VK_NUMPAD0        */ , PMSCAN_PAD0            , "Num 0"
     418/* 0x61 VK_NUMPAD1        */ , PMSCAN_PAD1            , "Num 1"
     419/* 0x62 VK_NUMPAD2        */ , PMSCAN_PAD2            , "Num 2"
     420/* 0x63 VK_NUMPAD3        */ , PMSCAN_PAD3            , "Num 3"
     421/* 0x64 VK_NUMPAD4        */ , PMSCAN_PAD4            , "Num 4"
     422/* 0x65 VK_NUMPAD5        */ , PMSCAN_PAD5            , "Num 5"
     423/* 0x66 VK_NUMPAD6        */ , PMSCAN_PAD6            , "Num 6"
     424/* 0x67 VK_NUMPAD7        */ , PMSCAN_PAD7            , "Num 7"
     425/* 0x68 VK_NUMPAD8        */ , PMSCAN_PAD8            , "Num 8"
     426/* 0x69 VK_NUMPAD9        */ , PMSCAN_PAD9            , "Num 9"
     427/* 0x6A VK_MULTIPLY       */ , PMSCAN_PADASTERISK     , "Num *"
     428/* 0x6B VK_ADD            */ , PMSCAN_PADPLUS         , "Num +"
     429/* 0x6C VK_SEPARATOR      */ , 0x00                   , NULL
     430/* 0x6D VK_SUBTRACT       */ , PMSCAN_PADMINUS        , "Num -"
     431/* 0x6E VK_DECIMAL        */ , PMSCAN_PADPERIOD       , "Num ."
     432/* 0x6F VK_DIVIDE         */ , PMSCAN_PADSLASH        , "Num /"
     433/* 0x70 VK_F1             */ , PMSCAN_F1              , "F1"
     434/* 0x71 VK_F2             */ , PMSCAN_F2              , "F2"
     435/* 0x72 VK_F3             */ , PMSCAN_F3              , "F3"
     436/* 0x73 VK_F4             */ , PMSCAN_F4              , "F4"
     437/* 0x74 VK_F5             */ , PMSCAN_F5              , "F5"
     438/* 0x75 VK_F6             */ , PMSCAN_F6              , "F6"
     439/* 0x76 VK_F7             */ , PMSCAN_F7              , "F7"
     440/* 0x77 VK_F8             */ , PMSCAN_F8              , "F8"
     441/* 0x78 VK_F9             */ , PMSCAN_F9              , "F9"
     442/* 0x79 VK_F10            */ , PMSCAN_F10             , "F10"
     443/* 0x7A VK_F11            */ , PMSCAN_F11             , "F11"
     444/* 0x7B VK_F12            */ , PMSCAN_F12             , "F12"
     445/* 0x7C VK_F13            */ , PMSCAN_F13             , "F13"
     446/* 0x7D VK_F14            */ , PMSCAN_F14             , "F14"
     447/* 0x7E VK_F15            */ , PMSCAN_F15             , "F15"
     448/* 0x7F VK_F16            */ , PMSCAN_F16             , "F16"
     449/* 0x80 VK_F17            */ , PMSCAN_F17             , "F17"
     450/* 0x81 VK_F18            */ , PMSCAN_F18             , "F18"
     451/* 0x82 VK_F19            */ , PMSCAN_F19             , "F19"
     452/* 0x83 VK_F20            */ , PMSCAN_F20             , "F20"
     453/* 0x84 VK_F21            */ , PMSCAN_F21             , "F21"
     454/* 0x85 VK_F22            */ , PMSCAN_F22             , "F22"
     455/* 0x86 VK_F23            */ , PMSCAN_F23             , "F23"
     456/* 0x87 VK_F24            */ , PMSCAN_F24             , "F24"
     457/* 0x88                   */ , 0x00                   , NULL
     458/* 0x89                   */ , 0x00                   , NULL
     459/* 0x8A                   */ , 0x00                   , NULL
     460/* 0x8B                   */ , 0x00                   , NULL
     461/* 0x8C                   */ , 0x00                   , NULL
     462/* 0x8D                   */ , 0x00                   , NULL
     463/* 0x8E                   */ , 0x00                   , NULL
     464/* 0x8F                   */ , 0x00                   , NULL
     465/* 0x90 VK_NUMLOCK        */ , PMSCAN_NUMLOCK         , "Num Lock"
     466/* 0x91 VK_SCROLL         */ , PMSCAN_SCROLLLOCK      , "Scroll Lock"
     467/* 0x92                   */ , 0x00                   , NULL
     468/* 0x93                   */ , 0x00                   , NULL
     469/* 0x94                   */ , 0x00                   , NULL
     470/* 0x95                   */ , 0x00                   , NULL
     471/* 0x96                   */ , 0x00                   , NULL
     472/* 0x97                   */ , 0x00                   , NULL
     473/* 0x98                   */ , 0x00                   , NULL
     474/* 0x99                   */ , 0x00                   , NULL
     475/* 0x9A                   */ , 0x00                   , NULL
     476/* 0x9B                   */ , 0x00                   , NULL
     477/* 0x9C                   */ , 0x00                   , NULL
     478/* 0x9D                   */ , 0x00                   , NULL
     479/* 0x9E                   */ , 0x00                   , NULL
     480/* 0x9F                   */ , 0x00                   , NULL
     481/* 0xA0 VK_LSHIFT         */ , PMSCAN_SHIFTLEFT       , "Left Shift"
     482/* 0xA1 VK_RSHIFT         */ , PMSCAN_SHIFTRIGHT      , "Right Shift"
     483/* 0xA2 VK_LCONTROL       */ , PMSCAN_CTRLLEFT        , "Left Control"
     484/* 0xA3 VK_RCONTROL       */ , PMSCAN_CTRLRIGHT       , "Right Control"
     485/* 0xA4 VK_LMENU          */ , PMSCAN_ALTLEFT         , "Left Alt"
     486/* 0xA5 VK_RMENU          */ , PMSCAN_ALTRIGHT        , "Right Alt"
     487/* 0xA6                   */ , 0x00                   , NULL
     488/* 0xA7                   */ , 0x00                   , NULL
     489/* 0xA8                   */ , 0x00                   , NULL
     490/* 0xA9                   */ , 0x00                   , NULL
     491/* 0xAA                   */ , 0x00                   , NULL
     492/* 0xAB                   */ , 0x00                   , NULL
     493/* 0xAC                   */ , 0x00                   , NULL
     494/* 0xAD                   */ , 0x00                   , NULL
     495/* 0xAE                   */ , 0x00                   , NULL
     496/* 0xAF                   */ , 0x00                   , NULL
     497/* 0xB0                   */ , 0x00                   , NULL
     498/* 0xB1                   */ , 0x00                   , NULL
     499/* 0xB2                   */ , 0x00                   , NULL
     500/* 0xB3                   */ , 0x00                   , NULL
     501/* 0xB4                   */ , 0x00                   , NULL
     502/* 0xB5                   */ , 0x00                   , NULL
     503/* 0xB6                   */ , 0x00                   , NULL
     504/* 0xB7                   */ , 0x00                   , NULL
     505/* 0xB8                   */ , 0x00                   , NULL
     506/* 0xB9                   */ , 0x00                   , NULL
     507/* 0xBA VK_SEMICOLON      */ , PMSCAN_SEMICOLON       , ";"
     508/* 0xBB VK_EQUAL          */ , PMSCAN_EQUAL           , "="
     509/* 0xBC VK_COMMA          */ , PMSCAN_COMMA           , ","
     510/* 0xBD VK_HYPHEN         */ , PMSCAN_HYPHEN          , "-"
     511/* 0xBE VK_PERIOD         */ , PMSCAN_PERIOD          , "."
     512/* 0xBF VK_SLASH          */ , PMSCAN_SLASH           , "/"
     513/* 0xC0 VK_GRAVE          */ , PMSCAN_GRAVE           , "'"
     514/* 0xC1 VK_FFC1           */ , PMSCAN_JEXTRA          , "JExtra" //??
     515/* 0xC2 VK_YEN            */ , PMSCAN_YEN             , "Yen"
     516/* 0xC3                   */ , 0x00                   , NULL
     517/* 0xC4                   */ , 0x00                   , NULL
     518/* 0xC5                   */ , 0x00                   , NULL
     519/* 0xC6                   */ , 0x00                   , NULL
     520/* 0xC7                   */ , 0x00                   , NULL
     521/* 0xC8                   */ , 0x00                   , NULL
     522/* 0xC9                   */ , 0x00                   , NULL
     523/* 0xCA                   */ , 0x00                   , NULL
     524/* 0xCB                   */ , 0x00                   , NULL
     525/* 0xCC                   */ , 0x00                   , NULL
     526/* 0xCD                   */ , 0x00                   , NULL
     527/* 0xCE                   */ , 0x00                   , NULL
     528/* 0xCF                   */ , 0x00                   , NULL
     529/* 0xD0                   */ , 0x00                   , NULL
     530/* 0xD1                   */ , 0x00                   , NULL
     531/* 0xD2                   */ , 0x00                   , NULL
     532/* 0xD3                   */ , 0x00                   , NULL
     533/* 0xD4                   */ , 0x00                   , NULL
     534/* 0xD5                   */ , 0x00                   , NULL
     535/* 0xD6                   */ , 0x00                   , NULL
     536/* 0xD7                   */ , 0x00                   , NULL
     537/* 0xD8                   */ , 0x00                   , NULL
     538/* 0xD9                   */ , 0x00                   , NULL
     539/* 0xDA                   */ , 0x00                   , NULL
     540/* 0xDB VK_BRACKETLEFT    */ , PMSCAN_BRACKETLEFT     , "["
     541/* 0xDC VK_BACKSLASH      */ , PMSCAN_BACKSLASH       , "\\"
     542/* 0xDD VK_BRACKETRIGHT   */ , PMSCAN_BRACKETRIGHT    , "]"
     543/* 0xDE VK_QUOTESINGLE    */ , PMSCAN_QUOTESINGLE     , "'"
     544/* 0xDF                   */ , 0x00                   , NULL
     545/* 0xE0                   */ , 0x00                   , NULL
     546/* 0xE1                   */ , 0x00                   , NULL
     547/* 0xE2 VK_EXTRA          */ , PMSCAN_EXTRA           , "<"
     548/* 0xE3                   */ , 0x00                   , NULL
     549/* 0xE4                   */ , 0x00                   , NULL
     550/* 0xE5                   */ , 0x00                   , NULL
     551/* 0xE6                   */ , 0x00                   , NULL
     552/* 0xE7                   */ , 0x00                   , NULL
     553/* 0xE8                   */ , 0x00                   , NULL
     554/* 0xE9                   */ , 0x00                   , NULL
     555/* 0xEA                   */ , 0x00                   , NULL
     556/* 0xEB                   */ , 0x00                   , NULL
     557/* 0xEC                   */ , 0x00                   , NULL
     558/* 0xED                   */ , 0x00                   , NULL
     559/* 0xEE                   */ , 0x00                   , NULL
     560/* 0xEF                   */ , 0x00                   , NULL
     561/* 0xF0                   */ , 0x00                   , NULL
     562/* 0xF1                   */ , 0x00                   , NULL
     563/* 0xF2                   */ , 0x00                   , NULL
     564/* 0xF3                   */ , 0x00                   , NULL
     565/* 0xF4                   */ , 0x00                   , NULL
     566/* 0xF5                   */ , 0x00                   , NULL
     567/* 0xF6 VK_ATTN           */ , 0x00                   , NULL
     568/* 0xF7 VK_CRSEL          */ , 0x00                   , NULL
     569/* 0xF8 VK_EXSEL          */ , 0x00                   , NULL
     570/* 0xF9 VK_EREOF          */ , PMSCAN_ERASEEOF        , "Erase"
     571/* 0xFA VK_PLAY           */ , 0x00                   , NULL
     572/* 0xFB VK_ZOOM           */ , 0x00                   , NULL
     573/* 0xFC VK_NONAME         */ , 0x00                   , NULL
     574/* 0xFD VK_PA1            */ , PMSCAN_PA1             , "PA1"
     575/* 0xFE VK_OEM_CLEAR      */ , 0x00                   , NULL
     576/* 0xFF                   */ , 0x00                   , NULL
    570577                             };
    571578
     
    579586{
    580587   for(int i=1;i<nrkeys;i++) {
    581        if(abWinVKeyToPMScan[i]) {
    582             winkey[i] = pmkey[OSLibWinTranslateChar(abWinVKeyToPMScan[i], TC_SCANCODETOVIRTUALKEY, 0)];
     588       if(abWinVKeyToPMScan[i].bPMScanCode) {
     589            winkey[i] = pmkey[OSLibWinTranslateChar(abWinVKeyToPMScan[i].bPMScanCode, TC_SCANCODETOVIRTUALKEY, 0)];
    583590       }
    584591   }
     
    589596//******************************************************************************
    590597//******************************************************************************
    591 BYTE KeyTranslateWinVKeyToPMScan(BYTE bWinScan)
    592 {
    593   // Note: array size of 256, so the BYTE value can't overflow
    594  
    595   // translate scancode to vkey
    596   BYTE bWinVKey = MapVirtualKeyA(bWinScan ,3);
    597   return abWinVKeyToPMScan[bWinVKey];
     598BYTE KeyTranslateWinVKeyToPMScan(BYTE bWinVKey, BOOL fExtended)
     599{
     600  // if the extended bit didn't match, this is
     601  // the closest hit
     602  BYTE bAlmost = 0;
     603 
     604  // experiment
     605#if 0
     606  bAlmost = abWinVKeyToPMScan[bWinVKey].bPMScanCode;
     607#else
     608  for(int i = 0;
     609      i < 256; // sizeof(row of abPMScanToWinVKey)
     610      i++)
     611  {
     612    if (abPMScanToWinVKey[i][0] == bWinVKey)
     613    {
     614      // this represents the PMScan code which is used as index     
     615      bAlmost = i;
     616     
     617      // exact match!
     618      if (abPMScanToWinVKey[i][1] == fExtended)
     619        break;
     620    }
     621  }
     622#endif
     623 
     624  dprintf(("KeyTranslateWinVKeyToPMScan(%02xh,%d) = %02xh",
     625           bWinVKey,
     626           fExtended,
     627           bAlmost));
     628 
     629  // almost a match or no match at all.
     630  return bAlmost;
     631}
     632//******************************************************************************
     633//******************************************************************************
     634BYTE KeyTranslateWinScanToPMScan(BYTE bWinScan, BOOL fExtended)
     635{
     636  // Mode: translate scancode to vkey
     637  BYTE bWinVKey;
     638  bWinVKey = MapVirtualKeyA(bWinScan ,3);
     639 
     640  return KeyTranslateWinVKeyToPMScan(bWinVKey, fExtended);
    598641}
    599642//******************************************************************************
     
    602645              int, nTypeFlag)
    603646{
    604     dprintf(("USER32: GetKeyboardType %x", nTypeFlag));
    605647    return O32_GetKeyboardType(nTypeFlag);
    606648}
     
    613655 BOOL   rc;
    614656
    615   dprintf(("USER32: GetKeyboardState %x", lpKeyState));
    616657  memset(PMKeyState, 0, sizeof(PMKeyState));
    617658  memset(lpKeyState, 0, 256);
     
    951992              int,    nSize)
    952993{
     994  // check the scancodes if the extended key bit is set so
     995  // we can easily distinguish between "left" and "right" special keys, etc.
     996  BOOL  fDontCare = (lParam & (1 << 25) ) != 0;
     997  BOOL  fExtended = (lParam & (1 << 24) ) != 0;
     998  UCHAR ucWinScan = (lParam & 0x00ff0000) >> 16;
     999  UCHAR ucWinVKey;
     1000  int   result;
     1001 
     1002  if (fDontCare)
     1003  {
     1004    // map "right keys" to "universal keys"
     1005    // LALT,RALT -> ALT
     1006    // etc.
     1007    // @@@PH
     1008  }
     1009 
    9531010  // Note: Open32 expects PM Scancodes, NOT Winscancodes.
    954   UCHAR ucPMScanCode = KeyTranslateWinVKeyToPMScan( (lParam & 0x00ff0000) >> 16);
    955  
    956   // switch the bits
    957   lParam &= 0xFF00FFFF;
    958   lParam |= (ucPMScanCode << 16);
    959  
    960   // @@@PH
    961   // Bugs in Open32:
     1011  ucWinVKey = MapVirtualKeyA(ucWinScan, 3);
     1012 
     1013  // Bug in Open32:
     1014  // 0 - expects PMScancodes instead of WinScancodes
    9621015  // 1 - the "extended key bit" is not taken into account
    963   // 2 - special injected scancodes (0x21d for Ctrl for AltGr) skipped
    964  
    965   int result = O32_GetKeyNameText(lParam,lpString,nSize);
    966   if (result)
    967     dprintf(("keyname=[%s]\n",
    968              lpString));
     1016  // 2 - some keys (AltGr) have not been assigned any names
     1017  // int result = O32_GetKeyNameText(lParam,lpString,nSize);
     1018 
     1019  memset(lpString, 0, nSize);
     1020 
     1021  LPSTR lpstrKey = abWinVKeyToPMScan[ucWinVKey].lpstrName;
     1022  if (NULL == lpstrKey)
     1023  {
     1024    dprintf(("ERROR: keyname for winscan=%02xh winvkey=%02xh, fExtended=%d not found.\n",
     1025             ucWinScan, ucWinVKey, fExtended & !fDontCare));
     1026   
     1027    // build artificial name
     1028   
     1029    CHAR szName[10];
     1030    sprintf(szName,
     1031            "VKey%02x%c",
     1032            ucWinScan,
     1033            fExtended ? '+' : 0);
     1034    memcpy(lpString, szName, nSize);
     1035   
     1036    // how many chars have been returned?
     1037    result = min(nSize, strlen(lpString));
     1038  }
     1039  else
     1040  {
     1041    result = min(nSize, strlen(lpstrKey));
     1042    strncpy (lpString, lpstrKey, result);
     1043  }
     1044 
     1045  dprintf(("keyname=[%s]\n",
     1046           lpString));
     1047 
    9691048  return result;
    9701049}
Note: See TracChangeset for help on using the changeset viewer.