Changeset 7187 for trunk/src/user32/winkeyboard.cpp
- Timestamp:
- Oct 24, 2001, 1:18:19 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/winkeyboard.cpp
r7166 r7187 1 /* $Id: winkeyboard.cpp,v 1.1 8 2001-10-23 08:36:20phaller Exp $ */1 /* $Id: winkeyboard.cpp,v 1.19 2001-10-24 11:18:19 phaller Exp $ */ 2 2 /* 3 3 * Win32 <-> PM key translation … … 308 308 }; 309 309 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 310 typedef struct tagWinVKeyToPMScan 311 { 312 /* index is the VKey value */ 313 BYTE bPMScanCode; 314 LPSTR lpstrName; 315 } WINVKEYTOPMSCAN, *PWINVKEYTOPMSCAN; 316 317 WINVKEYTOPMSCAN 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 570 577 }; 571 578 … … 579 586 { 580 587 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)]; 583 590 } 584 591 } … … 589 596 //****************************************************************************** 590 597 //****************************************************************************** 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]; 598 BYTE 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 //****************************************************************************** 634 BYTE 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); 598 641 } 599 642 //****************************************************************************** … … 602 645 int, nTypeFlag) 603 646 { 604 dprintf(("USER32: GetKeyboardType %x", nTypeFlag));605 647 return O32_GetKeyboardType(nTypeFlag); 606 648 } … … 613 655 BOOL rc; 614 656 615 dprintf(("USER32: GetKeyboardState %x", lpKeyState));616 657 memset(PMKeyState, 0, sizeof(PMKeyState)); 617 658 memset(lpKeyState, 0, 256); … … 951 992 int, nSize) 952 993 { 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 953 1010 // 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 962 1015 // 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 969 1048 return result; 970 1049 }
Note:
See TracChangeset
for help on using the changeset viewer.