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

📄 kbdpo.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
字号:
/*
 * ReactOS POASCII Keyboard layout
 * Copyright (C) 2006 ReactOS
 * License: LGPL, see: LGPL.txt
 * Based on kbdes, skbdda and skbdfr
 *
 * Made by Pedro Maia pedrom.maia@gmail.com
 * 
 *
 * http://keytouch.sourceforge.net/howto_keyboard/node4.html (Very Good)
 * http://www.microsoft.com/globaldev/tools/msklc.mspx (Keyboard layout file from MS)
 *
 *TODO
 *	Correct DEADKEYS
 *	Correct DIVIDE and PrtScr
 */

#include <windows.h>
#include <internal/kbd.h>

#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#else
#ifdef _MSC_VER
#pragma data_seg(".data")
#define ROSDATA static
#else
#define ROSDATA static __attribute__((section(".data")))
#endif
#endif


#define VK_EMPTY 0xff   /* The non-existent VK */
#define KSHIFT   0x001  /* Shift modifier */
#define KCTRL    0x002  /* Ctrl modifier */
#define KALT     0x004  /* Alt modifier */
#define KEXT     0x100  /* Extended key code */
#define KMULTI   0x200  /* Multi-key */
#define KSPEC    0x400  /* Special key */
#define KNUMP    0x800  /* Number-pad */
#define KNUMS    0xc00  /* Special + number pad */
#define KMEXT    0x300  /* Multi + ext */
 
#define SHFT_INVALID 0x0F

ROSDATA USHORT scancode_to_vk[] = {
/* 00 */  VK_EMPTY, 
/* 01 */  VK_ESCAPE, 
/* 02 */  '1', 
/* 03 */  '2', 
/* 04 */  '3', 
/* 05 */  '4', 
/* 06 */  '5', 
/* 07 */  '6', 
/* 08 */  '7', 
/* 09 */  '8', 
/* 0a */  '9', 
/* 0b */  '0', 
/* 0c */  VK_OEM_4, 
/* 0d */  VK_OEM_6, 
/* 0e */  VK_BACK, 
/* 0f */  VK_TAB, 
/* 10 */  'Q', 
/* 11 */  'W', 
/* 12 */  'E', 
/* 13 */  'R', 
/* 14 */  'T', 
/* 15 */  'Y', 
/* 16 */  'U', 
/* 17 */  'I', 
/* 18 */  'O', 
/* 19 */  'P', 
/* 1a */  VK_OEM_PLUS, 
/* 1b */  VK_OEM_1, 
/* 1c */  VK_RETURN, 
/* 1d */  VK_LCONTROL, 
/* 1e */  'A', 
/* 1f */  'S', 
/* 20 */  'D', 
/* 21 */  'F', 
/* 22 */  'G', 
/* 23 */  'H', 
/* 24 */  'J', 
/* 25 */  'K', 
/* 26 */  'L', 
/* 27 */  VK_OEM_3, 
/* 28 */  VK_OEM_7, 
/* 29 */  VK_OEM_5, 
/* 2a */  VK_LSHIFT, 
/* 2b */  VK_OEM_2, 
/* 2c */  'Z', 
/* 2d */  'X', 
/* 2e */  'C', 
/* 2f */  'V', 
/* 30 */  'B', 
/* 31 */  'N', 
/* 32 */  'M', 
/* 33 */  VK_OEM_COMMA, 
/* 34 */  VK_OEM_PERIOD, 
/* 35 */  VK_OEM_MINUS, 
/* 36 */  VK_RSHIFT, 
/* 37 */  VK_MULTIPLY, 
/* 38 */  VK_LMENU, 
/* 39 */  VK_SPACE, 
/* 3a */  VK_CAPITAL, 
/* 3b */  VK_F1, 
/* 3c */  VK_F2, 
/* 3d */  VK_F3, 
/* 3e */  VK_F4, 
/* 3f */  VK_F5, 
/* 40 */  VK_F6, 
/* 41 */  VK_F7, 
/* 42 */  VK_F8, 
/* 43 */  VK_F9, 
/* 44 */  VK_F10, 
/* 45 */  VK_NUMLOCK | KMEXT, 
/* 46 */  VK_SCROLL | KMULTI, 
/* 47 */  VK_HOME | KNUMS, 
/* 48 */  VK_UP | KNUMS, 
/* 49 */  VK_PRIOR | KNUMS, 
/* 4a */  VK_SUBTRACT, 
/* 4b */  VK_LEFT | KNUMS, 
/* 4c */  VK_CLEAR | KNUMS, 
/* 4d */  VK_RIGHT | KNUMS, 
/* 4e */  VK_ADD, 
/* 4f */  VK_END | KNUMS, 
/* 50 */  VK_DOWN | KNUMS, 
/* 51 */  VK_NEXT | KNUMS, 
/* 52 */  VK_INSERT | KNUMS, 
/* 53 */  VK_DELETE | KNUMS, 
/* 54 */  VK_SNAPSHOT, 
/* 55 */  VK_EMPTY, 
/* 56 */  VK_OEM_102, 
/* 57 */  VK_F11, 
/* 58 */  VK_F12, 
/* 59 */  VK_EMPTY, 
/* 5a */  VK_CLEAR, 
/* 5b */  VK_EMPTY, 
/* 5c */  VK_EMPTY, 
/* 5d */  VK_EMPTY, 
/* 5e */  VK_EMPTY,  /* EREOF */
/* 5f */  VK_EMPTY, 
/* 60 */  VK_EMPTY, 
/* 61 */  VK_EMPTY, 
/* 62 */  VK_EMPTY, 
/* 63 */  VK_EMPTY,  /* ZOOM */
/* 64 */  VK_HELP, 
/* 65 */  VK_F13, 
/* 66 */  VK_F14, 
/* 67 */  VK_F15, 
/* 68 */  VK_F16, 
/* 69 */  VK_F17, 
/* 6a */  VK_F18, 
/* 6b */  VK_F19, 
/* 6c */  VK_F20, 
/* 6d */  VK_F21, 
/* 6e */  VK_F22, 
/* 6f */  VK_F23, 
/* 70 */  VK_EMPTY, 
/* 71 */  VK_EMPTY, 
/* 72 */  VK_EMPTY, 
/* 73 */  VK_EMPTY, 
/* 74 */  VK_EMPTY, 
/* 75 */  VK_EMPTY, 
/* 76 */  VK_EMPTY, 
/* 77 */  VK_F24, 
/* 78 */  VK_EMPTY, 
/* 79 */  VK_EMPTY, 
/* 7a */  VK_EMPTY, 
/* 7b */  VK_EMPTY, 
/* 7c */  VK_EMPTY, 
/* 7d */  VK_EMPTY, 
/* 7e */  VK_EMPTY, 
/* 7f */  VK_EMPTY, 
/* 80 */  VK_EMPTY, 
/* 00 */  0
};
 
ROSDATA VSC_VK extcode0_to_vk[] = {
  { 0x10, VK_MEDIA_PREV_TRACK | KEXT }, // Pista Anterior
  { 0x19, VK_MEDIA_NEXT_TRACK | KEXT }, // Proxima Pista 
  { 0x1D, VK_RCONTROL | KEXT }, // Tecla ctrl
  { 0x20, VK_VOLUME_MUTE | KEXT }, // Mute volume
  { 0x21, VK_LAUNCH_APP2 | KEXT }, // Tecla calculadora
  { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT }, // Play/pause
  { 0x24, VK_MEDIA_STOP | KEXT }, // Stop
  { 0x2E, VK_VOLUME_DOWN | KEXT }, // Baixar volume
  { 0x30, VK_VOLUME_UP | KEXT }, // Subir volume
  { 0x32, VK_BROWSER_HOME | KEXT }, // Pagina predefinida do navegador de internet, ou abri-lo se n鉶 estiver activo
  { 0x35, VK_DIVIDE | KEXT }, // Tecla /
  { 0x37, VK_SNAPSHOT | KEXT }, // Tecla de Print Screen
  { 0x38, VK_RMENU | KEXT }, // Tecla Alt
  { 0x47, VK_HOME | KEXT }, // Tecla Home
  { 0x48, VK_UP | KEXT }, // Cursor Cima
  { 0x49, VK_PRIOR | KEXT }, // Tecla Re pag
  { 0x4b, VK_LEFT | KEXT }, // Cursor esquerda
  { 0x4d, VK_RIGHT | KEXT }, // Cursor direita
  { 0x4f, VK_END | KEXT }, // Tecla End
  { 0x50, VK_DOWN | KEXT }, // Cursor Down
  { 0x51, VK_NEXT | KEXT }, // Tecla Av pag
  { 0x52, VK_INSERT | KEXT }, // Tecla insert
  { 0x53, VK_DELETE | KEXT }, // Tecla delete
  { 0x5b, VK_LWIN | KEXT }, // Tecla windows esquerda
  { 0x5c, VK_RWIN | KEXT }, // Tecla windows direita
  { 0x5d, VK_APPS | KEXT }, // Tecla menu aplicacao direita*/
  { 0x5f, VK_SLEEP | KEXT }, // Tecla Sleep
  { 0x65, VK_BROWSER_SEARCH | KEXT }, // Pagina de pesquisa do navegador de internet
  { 0x66, VK_BROWSER_FAVORITES | KEXT }, // Favoritos, not yet implemented
  { 0x67, VK_BROWSER_REFRESH | KEXT }, // Actualizar pagina do navegador de internet
  { 0x68, VK_BROWSER_STOP | KEXT }, // Parar navega玢o na internet internet
  { 0x69, VK_BROWSER_FORWARD | KEXT }, // Frente no historico de paginas no navegador de internet
  { 0x6a, VK_BROWSER_BACK | KEXT }, // Atras no historico de paginas no navegador de internet (Backspace)
  { 0x6b, VK_LAUNCH_APP1 | KEXT }, // Tecla Meu Computador
  { 0x6c, VK_LAUNCH_MAIL | KEXT }, // Abrir programa de e-mail
  { 0x6d, VK_LAUNCH_MEDIA_SELECT | KEXT }, // Abrir reproductor multimedia
  { 0x1c, VK_RETURN | KEXT }, // Tecla de Enter
  { 0x46, VK_CANCEL | KEXT }, // Tecla Escape
  { 0, 0 },
};


ROSDATA VSC_VK extcode1_to_vk[] = {
   { 0, 0 },
};
 
ROSDATA VK_TO_BIT modifier_keys[] = {
  { VK_SHIFT,   KSHIFT },
  { VK_CONTROL, KCTRL },
  { VK_MENU,    KALT },
  { 0,  0 }
};

ROSDATA MODIFIERS modifier_bits = {
  modifier_keys,
  6,
  { 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3} 
/* NONE, SHIFT, CTRL, CTRL+SHIFT, ALT */
};

#define NOCAPS 0
#define CAPS   KSHIFT /* Caps -> shift */

ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
  /* Normal vs Shifted */
  
   /* The alphabet */
  { 'A',    CAPS,   {'a', 'A'} },
  { 'B',    CAPS,   {'b', 'B'} },
  { 'C',    CAPS,   {'c', 'C'} },
  { 'D',    CAPS,   {'d', 'D'} },
  { 'F',    CAPS,   {'f', 'F'} },
  { 'G',    CAPS,   {'g', 'G'} },
  { 'H',    CAPS,   {'h', 'H'} },
  { 'I',    CAPS,   {'i', 'I'} },
  { 'J',    CAPS,   {'j', 'J'} },
  { 'K',    CAPS,   {'k', 'K'} },
  { 'L',    CAPS,   {'l', 'L'} },
  { 'M',    CAPS,   {'m', 'M'} },
  { 'N',    CAPS,   {'n', 'N'} },
  { 'O',    CAPS,   {'o', 'O'} },
  { 'P',    CAPS,   {'p', 'P'} },
  { 'Q',    CAPS,   {'q', 'Q'} },
  { 'R',    CAPS,   {'r', 'R'} },
  { 'S',    CAPS,   {'s', 'S'} },
  { 'T',    CAPS,   {'t', 'T'} },
  { 'U',    CAPS,   {'u', 'U'} },
  { 'V',    CAPS,   {'v', 'V'} },
  { 'W',    CAPS,   {'w', 'W'} },
  { 'X',    CAPS,   {'x', 'X'} },
  { 'Y',    CAPS,   {'y', 'Y'} },
  { 'Z',    CAPS,   {'z', 'Z'} },

   /* The numbers */
  //De 2 ate 4 tem tres estados
   { '1',	NOCAPS, {'1', '!'} },
   { '5',	NOCAPS, {'5', '%'} },
   { '6',	NOCAPS, {'6', '&'} }, 
  //De 7 ate 0 tem tres estados

  /* Specials */
  /* Shift-_ generates PT */
  { VK_OEM_2,	NOCAPS, {'~', '^'} }, // ' 
  { VK_OEM_3,	CAPS,   {0xe7, 0xc7} }, // 

⌨️ 快捷键说明

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