⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scvkengus101.cpp

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*++
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

@doc    EXTERNAL

@module sctovk.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.

*/

#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 )
        {
        VKeyBuf[cVKeys] = ScanCodeToVKeyTable[ScanCode];
        if ( VKeyBuf[cVKeys] )
            {
            ScanCodeBuf[cVKeys] = ScanCode;
            KeyStateFlagsBuf[cVKeys] = KeyStateFlags;
            cVKeys++;
            }
        }

    //  For some reason, the print screen key has an extra 0xe02a scan code
    //  in it.  It doesn't do anything so we won't complain about it.
    if ( ( cVKeys == 0 ) &&
         ( ScanCode != 0xe02a ) )

⌨️ 快捷键说明

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