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

📄 kbdes.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
字号:
/*
 * ReactOS ESASCII Keyboard layout
 * Copyright (C) 2003 ReactOS
 * License: LGPL, see: LGPL.txt
 * Created by HUMA2000 from kbdus, kbdgr, kbdda and kbdfr
 * huma2000@terra.es
 * Thanks to arty for the kbtest utility and help
 * Thanks to carraca from reactos.com forum for his fixes
 * Thanks Elrond for help
 *
 * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
 * and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
 */


#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_1,     
/* 1b */  VK_OEM_PLUS,     
/* 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, no puedo probarlo hasta que no se implemente el sonido
  { 0x19, VK_MEDIA_NEXT_TRACK | KEXT }, // Pista siguiente,
  { 0x1D, VK_RCONTROL | KEXT }, // Tecla control
  { 0x20, VK_VOLUME_MUTE | KEXT }, // Silenciar volumen
  { 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 }, // Bajar volumen
  { 0x30, VK_VOLUME_UP | KEXT }, // Subir volumen
  { 0x32, VK_BROWSER_HOME | KEXT }, // Pagina de inicio del navegador de internet o abrirlo si no esta activolo
  { 0x35, VK_DIVIDE | KEXT }, // Tecla 
  { 0x37, VK_SNAPSHOT | KEXT }, // La tecla de imprimir pantalla 
  { 0x38, VK_RMENU | KEXT }, // Tecla alt
  { 0x47, VK_HOME | KEXT }, // Tecla inicio
  { 0x48, VK_UP | KEXT }, // Cursor arriba
  { 0x49, VK_PRIOR | KEXT }, // Tecla Re pag
  { 0x4B, VK_LEFT | KEXT }, // Cursor izquierda
  { 0x4D, VK_RIGHT | KEXT }, // Cursor derecha
  { 0x4F, VK_END | KEXT }, // Tecla Fin
  { 0x50, VK_DOWN | KEXT }, // Cursor abajo
  { 0x51, VK_NEXT | KEXT }, // Tecla Av pag
  { 0x52, VK_INSERT | KEXT }, // Tecla insertar
  { 0x53, VK_DELETE | KEXT }, // Tecla deletear
  { 0x5B, VK_LWIN | KEXT }, // Tecla windows izquierda
  { 0x5C, VK_RWIN | KEXT }, // Tecla windows derecha
  { 0x5D, VK_APPS | KEXT }, // Tecla menu aplicacion derecha
  { 0x5F, VK_SLEEP | KEXT }, // Tecla Sleep
  { 0x65, VK_BROWSER_SEARCH | KEXT }, // Pagina de b鷖queda en el navegador de internet
  { 0x66, VK_BROWSER_FAVORITES | KEXT }, // Favoritos, tengo que esperar a que el tcp/ip 
  { 0x67, VK_BROWSER_REFRESH | KEXT }, // Refrescar el navegador de internet
  { 0x68, VK_BROWSER_STOP | KEXT }, // Stop en el navegador de internet
  { 0x69, VK_BROWSER_FORWARD | KEXT }, // Adelante en el navegador de internet
  { 0x6A, VK_BROWSER_BACK | KEXT }, // Atr醩 en el navegador de internet
  { 0x6B, VK_LAUNCH_APP1 | KEXT }, // Tecla Mi pc
  { 0x6C, VK_LAUNCH_MAIL | KEXT }, // Abrir programa de e-mail
  { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT }, // Abrir reproductor multimedia
  { 0x1C, VK_RETURN | KEXT }, // La tecla de intro
  { 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 numbers */
  //Del 1 al 5 tienen tres estados
  { '4',         NOCAPS, {'4', '$'} },
  { '5', 	     NOCAPS, {'5',	'%'} }, 
  //El 6 tiene 3 estados
  { '7',         NOCAPS, {'7', '/'} },
  { '8',         NOCAPS, {'8', '('} },
  { '9',         NOCAPS, {'9', ')'} },
  { '0',         NOCAPS, {'0', '='} },
  { VK_OEM_3,    CAPS,   {0x00F1, 0x00D1} }, // 裱
  
  /* Specials */
  /* Ctrl-_ generates ES */
  { VK_OEM_6	 ,NOCAPS, {0x00a1, 0x00bf} }, // 】
  { VK_OEM_4       ,NOCAPS, {0x0027, '?'}    }, //'?
  { VK_OEM_COMMA   ,NOCAPS, {',',    ';'}    },
  { VK_OEM_PERIOD  ,NOCAPS, {'.',    ':'}    },
  { VK_OEM_MINUS   ,NOCAPS, {'-',    '_'}    },
  { VK_OEM_102     ,NOCAPS, {'<',    '>'}    }, 

  /* Keys that do not have shift states */
  { VK_TAB,		NOCAPS, {'\t',	'\t'}   },
  { VK_ADD,		NOCAPS, {'+', 	'+'}    },
  { VK_SUBTRACT,  NOCAPS, {'-', 	'-'}    },
  { VK_MULTIPLY,	NOCAPS, {'*', 	'*'}    },
  { VK_DIVIDE,	NOCAPS, {'/', 	'/'}    },
  { VK_ESCAPE,	NOCAPS, {'\x1b','\x1b'} },
  { VK_SPACE,	NOCAPS, {' ', 	' '}    },
  { 0, 0 }
};
 

ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
  /* Normal, Shifted, Ctrl */

  /* The alphabet */
  { 'A',         CAPS,   {'a', 'A', 0x01} },
  { 'B',         CAPS,   {'b', 'B', 0x02} },
  { 'C',         CAPS,   {'c', 'C', 0x03} },
  { 'D',         CAPS,   {'d', 'D', 0x04} },
  { 'F',         CAPS,   {'f', 'F', 0x06} },
  { 'G',         CAPS,   {'g', 'G', 0x07} },
  { 'H',         CAPS,   {'h', 'H', 0x08} },
  { 'I',         CAPS,   {'i', 'I', 0x09} },
  { 'J',         CAPS,   {'j', 'J', 0x0a} },
  { 'K',         CAPS,   {'k', 'K', 0x0b} },
  { 'L',         CAPS,   {'l', 'L', 0x0c} },
  { 'M',         CAPS,   {'m', 'M', 0x0d} },
  { 'N',         CAPS,   {'n', 'N', 0x0e} },
  { 'O',         CAPS,   {'o', 'O', 0x0f} },
  { 'P',         CAPS,   {'p', 'P', 0x10} },
  { 'Q',         CAPS,   {'q', 'Q', 0x11} },
  { 'R',         CAPS,   {'r', 'R', 0x12} },
  { 'S',         CAPS,   {'s', 'S', 0x13} },
  { 'T',         CAPS,   {'t', 'T', 0x14} },
  { 'U',         CAPS,   {'u', 'U', 0x15} },
  { 'V',         CAPS,   {'v', 'V', 0x16} },
  { 'W',         CAPS,   {'w', 'W', 0x17} },
  { 'X',         CAPS,   {'x', 'X', 0x18} },
  { 'Y',         CAPS,   {'y', 'Y', 0x19} },
  { 'Z',         CAPS,   {'z', 'Z', 0x1a} },

  /* Legacy (telnet-style) ascii escapes */
  { VK_RETURN, 	NOCAPS, {'\r',     '\r',     '\n'}    },
  { 0,0 }
};


ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, shifted, control, Alt+Gr */
  { '1', 		NOCAPS, {'1',      '!',      WCH_NONE,  0x00a6}  }, // 1!|
  { '2', 		NOCAPS, {'2',  	'"',      WCH_NONE,  '@'}     }, // 2"@
  { '3', 		NOCAPS, {'3', 	0x00B7,   WCH_NONE,  '#'}     }, // 3

⌨️ 快捷键说明

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