scvkengus1.cpp

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C++ 代码 · 共 631 行 · 第 1/2 页

CPP
631
字号
/* -*-C-*-
 *
 * $Revision: 1.2 $
 *   $Author: kwelton $
 *     $Date: 2000/08/02 22:40:19 $
 *
 * @module scvkengus1.cpp
 *
 * Sample implementation of the keyboard platform dependent scan code to
 * Virtual Key mapping for keyboard driver.
 *
 * Exports ScanCodeToVKey for the PDD to use to map scan codes to virtual
 * keys.  A version of this will be needed for every physical/virtual key
 * configuration.
 *
 * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
 * ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
 * PARTICULAR PURPOSE.
 *
 * Copyright (c) 1995-1998  Microsoft Corporation
 * Copyright (c) 2000 ARM Limited
 * All Rights Reserved
 */

#include <windows.h>
#include <keybddr.h>

#define PROFILE 1
#ifdef PROFILE
extern "C" void ProfileStart(DWORD,DWORD);
extern "C" void ProfileStop(void);
#endif

#define ScanCodeTableLast       0x7f

const UINT8 ScanCodeToVKeyTable[ScanCodeTableLast + 1] =
{
    0,                      // Scan Code 0x0
    VK_ESCAPE,              // Scan Code 0x1
    '1',                    // Scan Code 0x2
    '2',                    // Scan Code 0x3
    '3',                    // Scan Code 0x4
    '4',                    // Scan Code 0x5
    '5',                    // Scan Code 0x6
    '6',                    // Scan Code 0x7
    '7',                    // Scan Code 0x8
    '8',                    // Scan Code 0x9
    '9',                    // Scan Code 0xA
    '0',                    // Scan Code 0xB
    VK_HYPHEN,              // Scan Code 0xC
    VK_EQUAL,               // Scan Code 0xD
    VK_BACK,                // Scan Code 0xE
    VK_TAB,                 // Scan Code 0xF

    'Q',                    // Scan Code 0x10
    'W',                    // Scan Code 0x11
    'E',                    // Scan Code 0x12
    'R',                    // Scan Code 0x13
    'T',                    // Scan Code 0x14
    'Y',                    // Scan Code 0x15
    'U',                    // Scan Code 0x16
    'I',                    // Scan Code 0x17
    'O',                    // Scan Code 0x18
    'P',                    // Scan Code 0x19
    VK_LBRACKET,            // Scan Code 0x1A
    VK_RBRACKET,            // Scan Code 0x1B
    VK_RETURN,              // Scan Code 0x1C
    VK_LCONTROL,            // Scan Code 0x1D
    'A',                    // Scan Code 0x1E
    'S',                    // Scan Code 0x1F

    'D',                    // Scan Code 0x20
    'F',                    // Scan Code 0x21
    'G',                    // Scan Code 0x22
    'H',                    // Scan Code 0x23
    'J',                    // Scan Code 0x24
    'K',                    // Scan Code 0x25
    'L',                    // Scan Code 0x26
    VK_SEMICOLON,           // Scan Code 0x27
    VK_APOSTROPHE,          // Scan Code 0x28
    VK_BACKQUOTE,           // Scan Code 0x29
    VK_LSHIFT,              // Scan Code 0x2A
    VK_BACKSLASH,           // Scan Code 0x2B
    'Z',                    // Scan Code 0x2C
    'X',                    // Scan Code 0x2D
    'C',                    // Scan Code 0x2E
    'V',                    // Scan Code 0x2F

    'B',                    // Scan Code 0x30
    'N',                    // Scan Code 0x31
    'M',                    // Scan Code 0x32
    VK_COMMA,               // Scan Code 0x33
    VK_PERIOD,              // Scan Code 0x34
    VK_SLASH,               // Scan Code 0x35
    VK_RSHIFT,              // Scan Code 0x36
    VK_MULTIPLY,            // Scan Code 0x37
    VK_LMENU,               // Scan Code 0x38
    VK_SPACE,               // Scan Code 0x39
    VK_CAPITAL,             // Scan Code 0x3A
    VK_F1,                  // Scan Code 0x3B
    VK_F2,                  // Scan Code 0x3C
    VK_F3,                  // Scan Code 0x3D
    VK_F4,                  // Scan Code 0x3E
    VK_F5,                  // Scan Code 0x3F

    VK_F6,                  // Scan Code 0x40
    VK_F7,                  // Scan Code 0x41
    VK_F8,                  // Scan Code 0x42
    VK_F9,                  // Scan Code 0x43
    VK_F10,                 // Scan Code 0x44
    VK_NUMLOCK,             // Scan Code 0x45
    VK_SCROLL,              // Scan Code 0x46
    VK_NUMPAD7,             // Scan Code 0x47
    VK_NUMPAD8,             // Scan Code 0x48
    VK_NUMPAD9,             // Scan Code 0x49
    VK_SUBTRACT,            // Scan Code 0x4A
    VK_NUMPAD4,             // Scan Code 0x4B
    VK_NUMPAD5,             // Scan Code 0x4C
    VK_NUMPAD6,             // Scan Code 0x4D
    VK_ADD,                 // Scan Code 0x4E
    VK_NUMPAD1,             // Scan Code 0x4F

    VK_NUMPAD2,             // Scan Code 0x50
    VK_NUMPAD3,             // Scan Code 0x51
    VK_NUMPAD0,             // Scan Code 0x52
    VK_DECIMAL,             // Scan Code 0x53
    VK_SNAPSHOT,            // Scan Code 0x54
    0,                      // Scan Code 0x55
    0,                      // Scan Code 0x56
    VK_F11,                 // Scan Code 0x57
    VK_F12,                 // Scan Code 0x58
    0,                      // Scan Code 0x59
    0,                      // Scan Code 0x5A
    VK_LWIN,                // Scan Code 0x5B
    VK_RWIN,                // Scan Code 0x5C
    VK_APPS,                // Scan Code 0x5D
    0,                      // Scan Code 0x5E
    0,                      // Scan Code 0x5F

    0,                      // Scan Code 0x60
    0,                      // Scan Code 0x61
    0,                      // Scan Code 0x62
    VK_HELP,                // Scan Code 0x63
    VK_F13,                 // Scan Code 0x64
    VK_F14,                 // Scan Code 0x65
    VK_F15,                 // Scan Code 0x66
    VK_F16,                 // Scan Code 0x67
    VK_F17,                 // Scan Code 0x68
    VK_F18,                 // Scan Code 0x69
    VK_F19,                 // Scan Code 0x6A
    VK_F20,                 // Scan Code 0x6B
    VK_F21,                 // Scan Code 0x6C
    VK_F22,                 // Scan Code 0x6D
    VK_F23,                 // Scan Code 0x6E
    0,                      // Scan Code 0x6F

    0,                      // Scan Code 0x70
    0,                      // Scan Code 0x71
    0,                      // Scan Code 0x72
    0,                      // Scan Code 0x73
    0,                      // Scan Code 0x74
    0,                      // Scan Code 0x75
    VK_F24,                 // Scan Code 0x76
    0,                      // Scan Code 0x77
    0,                      // Scan Code 0x78
    0,                      // Scan Code 0x79
    0,                      // Scan Code 0x7A
    0,                      // Scan Code 0x7B
    0,                      // Scan Code 0x7C
    0,                      // Scan Code 0x7D
    0,                      // Scan Code 0x7E
    0,                      // Scan Code 0x7F
};


#define E0ScanCodeTableFirst    0xe035
#define E0ScanCodeTableLast             0xe05d

const UINT8 ScanCodeE0ToVKeyTable[] =
{
    VK_DIVIDE,              // Scan Code 0xE035
    0,                      // Scan Code 0xE036
    VK_SNAPSHOT,            // Scan Code 0xE037
    VK_RMENU,               // Scan Code 0xE038
    0,                      // Scan Code 0xE039
    0,                      // Scan Code 0xE03A
    0,                      // Scan Code 0xE03B
    0,                      // Scan Code 0xE03C
    0,                      // Scan Code 0xE03D
    0,                      // Scan Code 0xE03E
    0,                      // Scan Code 0xE03F
    0,                      // Scan Code 0xE040
    0,                      // Scan Code 0xE041
    0,                      // Scan Code 0xE042
    0,                      // Scan Code 0xE043
    0,                      // Scan Code 0xE044
    0,                      // Scan Code 0xE045
    0,                      // Scan Code 0xE046
    VK_HOME,                // Scan Code 0xE047
    VK_UP,                  // Scan Code 0xE048
    VK_PRIOR,               // Scan Code 0xE049
    0,                      // Scan Code 0xE04A
    VK_LEFT,                // Scan Code 0xE04B
    0,                      // Scan Code 0xE04C
    VK_RIGHT,               // Scan Code 0xE04D
    0,                      // Scan Code 0xE04E
    VK_END,                 // Scan Code 0xE04F
    VK_DOWN,                // Scan Code 0xE050
    VK_NEXT,                // Scan Code 0xE051
    VK_INSERT,              // Scan Code 0xE052
    VK_DELETE,              // Scan Code 0xE053
    0,                      // Scan Code 0xE054
    0,                      // Scan Code 0xE055
    0,                      // Scan Code 0xE056
    0,                      // Scan Code 0xE057
    0,                      // Scan Code 0xE058
    0,                      // Scan Code 0xE059
    0,                      // Scan Code 0xE05A
    VK_LWIN,                // Scan Code 0xE05B
    VK_RWIN,                // Scan Code 0xE05C
    VK_APPS,                // Scan Code 0xE05D
};

/*
 *
 * ScanCodeToVKeyEx:
 *
 * Map a scan code to virtual key(s).
 */
UINT32 ScanCodeToVKeyEx(UINT32 ScanCode, KEY_STATE_FLAGS KeyStateFlags,
                        UINT32 VKeyBuf[16], UINT32 ScanCodeBuf[16],
                        KEY_STATE_FLAGS KeyStateFlagsBuf[16])
{
    int cVKeys = 0;

#ifdef PROFILE
    if (ScanCode == /* 7A VK_F8 */ 0x42 && KeyStateFlags == KeyStateDownFlag)
        ProfileStart(200, 8);

    if (ScanCode == /* 7A VK_F9 */ 0x43 && KeyStateFlags == KeyStateDownFlag)
        ProfileStart(200, 4);

    if (ScanCode == /* 7A VK_F10 */ 0x44 && KeyStateFlags == KeyStateDownFlag)
        ProfileStart(200, 2);

    if (ScanCode == /* 7A VK_F11 */ 0x57 && KeyStateFlags == KeyStateDownFlag)
        ProfileStart(200, 0);

    if (ScanCode == /* 7B VK_F12 */ 0x58 && KeyStateFlags == KeyStateDownFlag)
        ProfileStop();
#endif

    if (ScanCode == 0x45)
    {
        //      The desktop shows that this is an extended
        //      scan code.  To make it look the same, we
        //      pass back the scan code with a e0 tacked
        //      on to it.
        VKeyBuf[cVKeys] = VK_NUMLOCK;
        ScanCodeBuf[cVKeys] = 0xe045;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
    }
    else if (ScanCode == 0xe01c)
    {
        VKeyBuf[cVKeys] = VK_RETURN;
        ScanCodeBuf[cVKeys] = ScanCode;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
    }
    else if (ScanCode == 0xe01d)
    {
        VKeyBuf[cVKeys] = VK_RCONTROL;
        ScanCodeBuf[cVKeys] = ScanCode;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
    }

#if USE_ALT_GR
    //      Turn this on if you need AltGr on a keyboard.
    else if (ScanCode == 0xe038)
    {
        VKeyBuf[cVKeys] = VK_RMENU;
        ScanCodeBuf[cVKeys] = ScanCode;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
        VKeyBuf[cVKeys] = VK_RCONTROL;
        ScanCodeBuf[cVKeys] = ScanCode;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
    }
#endif

    else if (ScanCode == 0xe11d45)
    {
        VKeyBuf[cVKeys] = VK_PAUSE;
        ScanCodeBuf[cVKeys] = 0x45;
        KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
        cVKeys++;
    }
    else if ((ScanCode >= E0ScanCodeTableFirst) &&
             (ScanCode <= E0ScanCodeTableLast))
    {
        VKeyBuf[cVKeys] =
            ScanCodeE0ToVKeyTable[ScanCode - E0ScanCodeTableFirst];

        if (VKeyBuf[cVKeys])
        {
            ScanCodeBuf[cVKeys] = ScanCode;
            KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
            cVKeys++;
        }
    }
    else if (ScanCode <= ScanCodeTableLast)
    {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?