亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kbdinmar.cpp

?? 此代碼為WCE5.0下鍵盤驅動的源代碼
?? CPP
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include <windows.h>
#include <keybddr.h>
#include <LayMgr.h>
#include <DeviceLayout.h>
#include <NumPadRmp.h>

// Generated by tool built on Dec 30 2003 15:22:20
// from keyboard DLL C:\WINDOWS\System32\kbdinmar.dll
// for input locale 0000044E


// Desktop virtual keys do not always match CE virtual keys. The 
// following #defines are attempts to convert those without direct
// matches. These should be reviewed and compared with the 
// corresponding input language or device layout.
//
// Virtual keys without equivalents will need to be mapped to OEM-defined
// virtual keys in order for those keys to be used. Note however, that all
// AT scan codes listed in the device layout are not necessarily generated
// by keyboards of that specific input locale. They are often listed only
// for completeness so defining their virtual keys as 0 might not be a 
// problem.

#define VK_OEM_MINUS     VK_HYPHEN        // CE naming difference
#define VK_OEM_PLUS      VK_EQUAL         // CE naming difference
#define VK_OEM_4         VK_LBRACKET      // CE naming difference
#define VK_OEM_6         VK_RBRACKET      // CE naming difference
#define VK_OEM_1         VK_SEMICOLON     // CE naming difference
#define VK_OEM_7         VK_APOSTROPHE    // CE naming difference
#define VK_OEM_3         VK_BACKQUOTE     // CE naming difference
#define VK_OEM_5         VK_BACKSLASH     // CE naming difference
#define VK_OEM_COMMA     VK_COMMA         // CE naming difference
#define VK_OEM_PERIOD    VK_PERIOD        // CE naming difference
#define VK_OEM_2         VK_SLASH         // CE naming difference
#define VK_OEM_WSCTRL    0                // No CE equivalent
#define VK_OEM_FINISH    VK_DBE_KATAKANA  // CE naming difference
#define VK_OEM_JUMP      0                // No CE equivalent
#define VK_OEM_BACKTAB   VK_DBE_ROMAN     // CE naming difference
#define VK_OEM_AUTO      VK_DBE_SBCSCHAR  // CE naming difference
#define VK_OEM_PA3       0                // No CE equivalent
#define VK_OEM_RESET     0                // No CE equivalent
#define VK_ABNT_C1       0                // No CE equivalent
#define VK_OEM_PA1       0                // No CE equivalent
#define VK_ABNT_C2       0                // No CE equivalent
#define VK_OEM_8         VK_OFF           // CE naming difference


static const DWORD dwScToVkFirst = 0x01;
static const DWORD dwScToVkLast  = 0x84;
static UINT8 rguiScToVk[] = {
    /* 01 */  VK_F9,
    /* 02 */  0,
    /* 03 */  VK_F5,
    /* 04 */  VK_F3,
    /* 05 */  VK_F1,
    /* 06 */  VK_F2,
    /* 07 */  VK_F12,
    /* 08 */  VK_F13,
    /* 09 */  VK_F10,
    /* 0A */  VK_F8,
    /* 0B */  VK_F6,
    /* 0C */  VK_F4,
    /* 0D */  VK_TAB,
    /* 0E */  VK_OEM_3,
    /* 0F */  VK_CLEAR,
    /* 10 */  VK_F14,
    /* 11 */  VK_LMENU,
    /* 12 */  VK_LSHIFT,
    /* 13 */  0,
    /* 14 */  VK_LCONTROL,
    /* 15 */  'Q',
    /* 16 */  '1',
    /* 17 */  VK_OEM_WSCTRL,
    /* 18 */  VK_F15,
    /* 19 */  VK_OEM_RESET,
    /* 1A */  'Z',
    /* 1B */  'S',
    /* 1C */  'A',
    /* 1D */  'W',
    /* 1E */  '2',
    /* 1F */  VK_OEM_FINISH,
    /* 20 */  VK_F16,
    /* 21 */  'C',
    /* 22 */  'X',
    /* 23 */  'D',
    /* 24 */  'E',
    /* 25 */  '4',
    /* 26 */  '3',
    /* 27 */  VK_OEM_JUMP,
    /* 28 */  VK_F17,
    /* 29 */  VK_SPACE,
    /* 2A */  'V',
    /* 2B */  'F',
    /* 2C */  'T',
    /* 2D */  'R',
    /* 2E */  '5',
    /* 2F */  VK_EREOF,
    /* 30 */  VK_F18,
    /* 31 */  'N',
    /* 32 */  'B',
    /* 33 */  'H',
    /* 34 */  'G',
    /* 35 */  'Y',
    /* 36 */  '6',
    /* 37 */  VK_OEM_BACKTAB,
    /* 38 */  VK_F19,
    /* 39 */  0,
    /* 3A */  'M',
    /* 3B */  'J',
    /* 3C */  'U',
    /* 3D */  '7',
    /* 3E */  '8',
    /* 3F */  VK_OEM_AUTO,
    /* 40 */  VK_F20,
    /* 41 */  VK_OEM_COMMA,
    /* 42 */  'K',
    /* 43 */  'I',
    /* 44 */  'O',
    /* 45 */  '0',
    /* 46 */  '9',
    /* 47 */  0,
    /* 48 */  VK_F21,
    /* 49 */  VK_OEM_PERIOD,
    /* 4A */  VK_OEM_2,
    /* 4B */  'L',
    /* 4C */  VK_OEM_1,
    /* 4D */  'P',
    /* 4E */  VK_OEM_MINUS,
    /* 4F */  0,
    /* 50 */  VK_F22,
    /* 51 */  VK_ABNT_C1,
    /* 52 */  VK_OEM_7,
    /* 53 */  0,
    /* 54 */  VK_OEM_4,
    /* 55 */  VK_OEM_PLUS,
    /* 56 */  VK_ZOOM,
    /* 57 */  VK_F23,
    /* 58 */  VK_CAPITAL,
    /* 59 */  VK_RSHIFT,
    /* 5A */  VK_RETURN,
    /* 5B */  VK_OEM_6,
    /* 5C */  0,
    /* 5D */  VK_OEM_5,
    /* 5E */  VK_HELP,
    /* 5F */  VK_F24,
    /* 60 */  0,
    /* 61 */  VK_OEM_102,
    /* 62 */  0,
    /* 63 */  0,
    /* 64 */  0,
    /* 65 */  0,
    /* 66 */  VK_BACK,
    /* 67 */  VK_OEM_PA1,
    /* 68 */  VK_TAB,
    /* 69 */  VK_NUMPAD1,
    /* 6A */  0,
    /* 6B */  VK_NUMPAD4,
    /* 6C */  VK_NUMPAD7,
    /* 6D */  VK_ABNT_C2,
    /* 6E */  0,
    /* 6F */  VK_OEM_PA3,
    /* 70 */  VK_NUMPAD0,
    /* 71 */  VK_DECIMAL,
    /* 72 */  VK_NUMPAD2,
    /* 73 */  VK_NUMPAD5,
    /* 74 */  VK_NUMPAD6,
    /* 75 */  VK_NUMPAD8,
    /* 76 */  VK_ESCAPE,
    /* 77 */  VK_NUMLOCK,
    /* 78 */  VK_F11,
    /* 79 */  VK_ADD,
    /* 7A */  VK_NUMPAD3,
    /* 7B */  VK_SUBTRACT,
    /* 7C */  VK_MULTIPLY,
    /* 7D */  VK_NUMPAD9,
    /* 7E */  VK_SCROLL,
    /* 7F */  0,
    /* 80 */  0,
    /* 81 */  0,
    /* 82 */  0,
    /* 83 */  VK_F7,
    /* 84 */  VK_SNAPSHOT,
};

static ScanCodeToVKeyData scvk = {
    0x00,
    dwScToVkFirst,
    dwScToVkLast,
    rguiScToVk
};


static const DWORD dwE0ScToVkFirst = 0xE010;
static const DWORD dwE0ScToVkLast  = 0xE07E;
static UINT8 rguiE0ScToVk[] = {
    /* E010 */  VK_BROWSER_SEARCH,
    /* E011 */  VK_RMENU,
    /* E012 */  0,
    /* E013 */  0,
    /* E014 */  VK_RCONTROL,
    /* E015 */  VK_MEDIA_PREV_TRACK,
    /* E016 */  0,
    /* E017 */  0,
    /* E018 */  VK_BROWSER_FAVORITES,
    /* E019 */  0,
    /* E01A */  0,
    /* E01B */  0,
    /* E01C */  0,
    /* E01D */  0,
    /* E01E */  0,
    /* E01F */  VK_LWIN,
    /* E020 */  VK_BROWSER_REFRESH,
    /* E021 */  VK_VOLUME_DOWN,
    /* E022 */  0,
    /* E023 */  VK_VOLUME_MUTE,
    /* E024 */  0,
    /* E025 */  0,
    /* E026 */  0,
    /* E027 */  VK_RWIN,
    /* E028 */  VK_BROWSER_STOP,
    /* E029 */  0,
    /* E02A */  0,
    /* E02B */  VK_LAUNCH_APP2,
    /* E02C */  0,
    /* E02D */  0,
    /* E02E */  0,
    /* E02F */  VK_APPS,
    /* E030 */  VK_BROWSER_FORWARD,
    /* E031 */  0,
    /* E032 */  VK_VOLUME_UP,
    /* E033 */  0,
    /* E034 */  VK_MEDIA_PLAY_PAUSE,
    /* E035 */  0,
    /* E036 */  0,
    /* E037 */  0,
    /* E038 */  VK_BROWSER_BACK,
    /* E039 */  0,
    /* E03A */  VK_BROWSER_HOME,
    /* E03B */  VK_MEDIA_STOP,
    /* E03C */  0,
    /* E03D */  0,
    /* E03E */  0,
    /* E03F */  VK_OEM_8,
    /* E040 */  VK_LAUNCH_APP1,
    /* E041 */  0,
    /* E042 */  0,
    /* E043 */  0,
    /* E044 */  0,
    /* E045 */  0,
    /* E046 */  0,
    /* E047 */  0,
    /* E048 */  VK_LAUNCH_MAIL,
    /* E049 */  0,
    /* E04A */  VK_DIVIDE,
    /* E04B */  0,
    /* E04C */  0,
    /* E04D */  VK_MEDIA_NEXT_TRACK,
    /* E04E */  0,
    /* E04F */  0,
    /* E050 */  VK_LAUNCH_MEDIA_SELECT,
    /* E051 */  0,
    /* E052 */  0,
    /* E053 */  0,
    /* E054 */  0,
    /* E055 */  0,
    /* E056 */  0,
    /* E057 */  0,
    /* E058 */  0,
    /* E059 */  0,
    /* E05A */  VK_RETURN,
    /* E05B */  0,
    /* E05C */  0,
    /* E05D */  0,
    /* E05E */  0,
    /* E05F */  0,
    /* E060 */  0,
    /* E061 */  0,
    /* E062 */  0,
    /* E063 */  0,
    /* E064 */  0,
    /* E065 */  0,
    /* E066 */  0,
    /* E067 */  0,
    /* E068 */  0,
    /* E069 */  VK_END,
    /* E06A */  0,
    /* E06B */  VK_LEFT,
    /* E06C */  VK_HOME,
    /* E06D */  0,
    /* E06E */  0,
    /* E06F */  0,
    /* E070 */  VK_INSERT,
    /* E071 */  VK_DELETE,
    /* E072 */  VK_DOWN,
    /* E073 */  0,
    /* E074 */  VK_RIGHT,
    /* E075 */  VK_UP,
    /* E076 */  0,
    /* E077 */  0,
    /* E078 */  0,
    /* E079 */  0,
    /* E07A */  VK_NEXT,
    /* E07B */  0,
    /* E07C */  VK_SNAPSHOT,
    /* E07D */  VK_PRIOR,
    /* E07E */  VK_CANCEL,
};

static ScanCodeToVKeyData scvkE0 = {
    0xE000,
    dwE0ScToVkFirst,
    dwE0ScToVkLast,
    rguiE0ScToVk
};


static const DWORD dwE114ScToVkFirst = 0xE11477;
static const DWORD dwE114ScToVkLast  = 0xE11477;
static UINT8 rguiE114ScToVk[] = {
    /* E11477 */  VK_PAUSE,
};

static ScanCodeToVKeyData scvkE114 = {
    0xE11400,
    dwE114ScToVkFirst,
    dwE114ScToVkLast,
    rguiE114ScToVk
};


static ScanCodeToVKeyData *rgscvkAT[] = {
    &scvk, &scvkE0, &scvkE114
};


//-----------------------------------------------------------------------------
// Remapping function

#define IsShiftModifier(x) ((x) == VK_LSHIFT || (x) == VK_RSHIFT || \
	(x) == VK_LCONTROL || (x) == VK_RCONTROL || (x) == VK_LMENU || (x) == VK_RMENU || \
	(x) == VK_LWIN || (x) == VK_RWIN)


static
UINT
WINAPI
ATRemapVKey(
    const KEYBD_EVENT *pKbdEvents,
    UINT               cKbdEvents,
    KEYBD_EVENT       *pRmpKbdEvents,
    UINT               cMaxRmpKbdEvents
    )
{
    UINT cRmpKbdEvents;

    if (pRmpKbdEvents == NULL) {
        // 1 to 1 mapping for whatever NumPadRemapVKey returns
        ASSERT(cMaxRmpKbdEvents == 0);
        return NumPadRemapVKey(pKbdEvents, cKbdEvents, NULL, 0);
    }
    
    ASSERT(pKbdEvents != NULL);

    // We know that we will only map one input to one output. Thus, we only
    // need for NumPadRemapVKey() to check the number of input events since
    // we will not use more than it does. If the buffer is not large enough
    // cRmpKbdEvents will be 0 and we will return 0.
    cRmpKbdEvents = NumPadRemapVKey(pKbdEvents, cKbdEvents, 
        pRmpKbdEvents, cMaxRmpKbdEvents);

    for (UINT ui = 0; ui < cRmpKbdEvents; ++ui) 
    {
        if (pRmpKbdEvents[ui].KeyStateFlags & KeyStateDownFlag) {
            UINT32 vkOnly = LOBYTE(pRmpKbdEvents[ui].uiVk);

            // If the incoming key is a shift modifier of some sort, turn off keyclick autorepeat by default.
            // We will allow the shift key to click on the first press, since many keyboards don't have built-in
            // sound generators and users appreciate audible feedback when they press a key.
            if(IsShiftModifier(vkOnly) || vkOnly == VK_CAPITAL || vkOnly == VK_NUMLOCK) {
                pRmpKbdEvents[ui].uiVk |= KEYBD_DEVICE_SILENT_REPEAT;
            }
        }
    }

    return cRmpKbdEvents;
}
#ifdef DEBUG
// Verify function declaration against the typedef.
static PFN_KEYBD_REMAP g_pfnATRemapVKey = ATRemapVKey;
#endif


static DEVICE_LAYOUT dlAT =
{
    sizeof(DEVICE_LAYOUT),
    PS2_AT_PDD | PS2_NOP_PDD,
    rgscvkAT,
    dim(rgscvkAT),
    ATRemapVKey,
};


extern "C"
BOOL
PS2_AT_0000044E(
    PDEVICE_LAYOUT pDeviceLayout
    )
{
    PREFAST_ASSERT(pDeviceLayout != NULL);

    BOOL fRet = FALSE;

    if (pDeviceLayout->dwSize != sizeof(DEVICE_LAYOUT)) {
        RETAILMSG(1, (_T("PS2_AT_0000044E: data structure size mismatch\r\n")));
        goto leave;
    }

    // Make sure that the Sc->Vk tables are the sizes that we expect
    ASSERT(dim(rguiScToVk    ) == (1 + dwScToVkLast     - dwScToVkFirst    ));
    ASSERT(dim(rguiE0ScToVk  ) == (1 + dwE0ScToVkLast   - dwE0ScToVkFirst  ));
    ASSERT(dim(rguiE114ScToVk) == (1 + dwE114ScToVkLast - dwE114ScToVkFirst));

    *pDeviceLayout = dlAT;

    fRet = TRUE;

leave:
    return fRet;
}
#ifdef DEBUG
// Verify function declaration against the typedef.
static PFN_DEVICE_LAYOUT_ENTRY g_pfnDLEntry = PS2_AT_0000044E;
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久久久| 狂野欧美性猛交blacked| 午夜成人免费视频| 国产激情视频一区二区在线观看 | 中文字幕日韩一区| 日韩va欧美va亚洲va久久| 色综合久久久久久久| 久久久精品免费观看| 日本不卡视频在线观看| 一本在线高清不卡dvd| 中文字幕免费不卡在线| 精一区二区三区| 精品国内二区三区| 亚洲大片一区二区三区| 97se亚洲国产综合自在线| 欧美精品一区二区三区在线| 成人污污视频在线观看| 在线播放欧美女士性生活| 亚洲免费在线视频| jiyouzz国产精品久久| 中文字幕高清不卡| 国产高清不卡一区| 久久综合九色综合97婷婷女人| 免费成人深夜小野草| 欧美性猛交xxxx黑人交| 一区二区三区在线视频播放| 色爱区综合激月婷婷| 亚洲精品日韩专区silk| 色综合咪咪久久| 亚洲美女免费视频| 日本丶国产丶欧美色综合| 亚洲色图清纯唯美| 91网站在线观看视频| 亚洲天堂久久久久久久| 日本韩国一区二区三区视频| 一区二区三区在线视频观看| 欧美三级电影精品| 日韩精品一级二级 | 韩国视频一区二区| 精品国产亚洲在线| 国产一区美女在线| 日本一区二区不卡视频| 91蝌蚪国产九色| 91丨九色丨黑人外教| 麻豆一区二区在线| 精品国产髙清在线看国产毛片| 理论电影国产精品| 中文字幕国产一区二区| 在线一区二区三区四区五区| 亚洲电影视频在线| 日韩一区二区视频在线观看| 国产乱妇无码大片在线观看| 国产精品久99| 欧美日韩一二三| 精品一区二区在线看| 国产欧美久久久精品影院| 91久久线看在观草草青青| 午夜欧美一区二区三区在线播放| 日韩精品一区二区在线观看| 9久草视频在线视频精品| 亚洲超碰精品一区二区| 久久嫩草精品久久久精品| 色综合一个色综合亚洲| 日韩电影在线观看电影| 国产精品视频yy9299一区| 欧美日韩亚州综合| 国产白丝网站精品污在线入口| 亚洲一区二区三区精品在线| 久久影院午夜片一区| 在线亚洲人成电影网站色www| 乱一区二区av| 亚洲一线二线三线视频| 26uuu国产电影一区二区| 欧美影片第一页| 国产美女一区二区三区| 午夜精品免费在线观看| 国产精品网站在线播放| 欧美一区二区精品久久911| bt7086福利一区国产| 久久成人av少妇免费| 亚洲成va人在线观看| 国产精品久久久久久久久图文区 | 久久婷婷成人综合色| 在线亚洲人成电影网站色www| 国产精品一区二区三区乱码| 亚洲国产成人va在线观看天堂| 26uuu另类欧美亚洲曰本| 欧美精品xxxxbbbb| 91免费视频观看| 成人精品高清在线| 狠狠色狠狠色综合| 蜜臀av性久久久久蜜臀aⅴ| 一区二区在线看| 国产精品成人在线观看| 久久久久9999亚洲精品| 日韩欧美视频一区| 91精品一区二区三区在线观看| 色成年激情久久综合| 不卡区在线中文字幕| 国产成人免费在线观看| 国产精品一区一区| 精品在线播放午夜| 久久99精品久久久久久国产越南| 亚洲成人午夜电影| 亚洲6080在线| 亚洲mv大片欧洲mv大片精品| 亚洲在线视频免费观看| 亚洲国产精品一区二区尤物区| 亚洲精品免费视频| 一区二区三区日韩在线观看| 亚洲精品伦理在线| 一区二区三区精品视频| 亚洲图片一区二区| 亚洲高清免费一级二级三级| 一片黄亚洲嫩模| 午夜精品免费在线观看| 日韩综合一区二区| 美国毛片一区二区| 国产综合色精品一区二区三区| 激情文学综合网| 国产成人无遮挡在线视频| av在线不卡免费看| 91丨porny丨户外露出| 色婷婷久久一区二区三区麻豆| 91久久精品网| 91精品国产福利| 久久久久久久久免费| 中国av一区二区三区| 亚洲自拍都市欧美小说| 日韩电影在线免费看| 久久不见久久见中文字幕免费| 国产乱码字幕精品高清av| hitomi一区二区三区精品| 在线免费不卡视频| 日韩写真欧美这视频| 欧美国产精品专区| 亚洲一区二区三区四区在线观看 | 日韩免费一区二区三区在线播放| 欧美sm美女调教| 欧美国产日韩a欧美在线观看 | 欧美视频中文一区二区三区在线观看| 欧美日韩一区高清| 久久久久高清精品| 一二三四社区欧美黄| 久久不见久久见免费视频7| 粉嫩aⅴ一区二区三区四区| 在线视频国内自拍亚洲视频| 日韩精品在线看片z| 亚洲视频在线观看三级| 日本女优在线视频一区二区| 成人免费毛片嘿嘿连载视频| 欧美美女直播网站| 欧美高清在线视频| 免费久久精品视频| 色综合欧美在线视频区| 亚洲精品在线电影| 亚洲成av人片一区二区| av在线这里只有精品| 日韩一区二区在线看| 亚洲日本va在线观看| 久久精品99国产精品日本| 日本伦理一区二区| 久久精品视频一区二区三区| 日韩黄色在线观看| 一本色道亚洲精品aⅴ| 久久精品亚洲精品国产欧美| 日韩av不卡一区二区| 91免费国产视频网站| 久久久久久久久久久久电影 | 亚洲一区视频在线观看视频| 久久疯狂做爰流白浆xx| 欧美日韩综合一区| 亚洲人成网站色在线观看| 国产一级精品在线| 日韩精品一区二区三区swag| 亚洲第一搞黄网站| 色婷婷av一区二区三区大白胸| 国产视频一区二区在线观看| 久久99精品国产麻豆婷婷 | 久久电影网电视剧免费观看| 欧美日精品一区视频| 一区二区三区中文字幕电影| 不卡的av中国片| 欧美国产一区视频在线观看| 国产精品自在欧美一区| 欧美大片拔萝卜| 蜜臀久久99精品久久久久久9| 欧美日韩国产美| 婷婷国产v国产偷v亚洲高清| 在线观看91精品国产入口| 中文字幕一区二区在线观看| 国产成人午夜电影网| 日本一区二区在线不卡| 国产成人在线免费观看| 国产日产欧产精品推荐色| 国产精品99久久不卡二区| 国产日韩综合av| 成人av资源在线观看| 亚洲少妇最新在线视频| 色视频成人在线观看免|