鼠标,键盘对应KEY值
- 格式:rtf
- 大小:38.01 KB
- 文档页数:3
VB鼠标事件与键盘事件SuB Form—MouseMove(Buttoil As Integer,Shift As Integer,x As Single,Y As Single)这3个鼠标事件过程具有相同的参数,它们把鼠标的信息传给过程。
(1)Button:被按下的鼠标按钮,可以取以下3个值。
(2)Shift:表示Shift、ctrl和Alt的状态。
如表6.7所示。
(3)x,Y:这两个值对应于当前鼠标的位置,采用ScaleMode属性指定的位置。
说明:(1)有些鼠标只有2个按键,或者虽有3个按键,但w:indows鼠标驱动程序不能识别中间按键。
在这种情况下,表6.6中的后4个参数值不能使用。
(2)对于单按鼠标器,它的按键定义为左按键。
如果鼠标带两个按键,并使用windows 的控制面板交换了鼠标器的左、右键,那么,当按右按键时,VB认为是按了左按键。
例如,如果按住Ctrl键,然后在坐标为(2000,3000)的点上按下鼠标器右键,则立即调用Forul—MouseDown过程,释放鼠标右键时,调用Form—MouseUp过程。
此时。
Button、Shift、x、Y这4个参数的值分别为2、2、2000和3000.(3)Shift是转换键,它指的是3个转换状态,包括Shift、ctrl和Alt。
这3个键分别以二进制方式表示,每个键用三位,即:Shift键为001,Ctrl键为010,Alt键为100。
当按下Shift键时,Shift参数的值为00l(十进制数1),当按下ctrl键时,Shift参数的值为010(十进制数2),而按下Alt键时,Shift参数的值为100(十进制数4)。
如果同时按下2个或3个转换键,则Shift参数的值即为上述两者或三者之和。
因此,Shift参数共可取8种值。
Private Sub Form_Load()KeyPreview=TrueEnd SubKeyPreview属性返回或设置一个值,以决定是否在控件的键盘事件之前激活窗体的键盘事件。
第八章键盘与鼠标操作 (2w)程序在运行过程中,经常需要知道用户对键盘和鼠标的具体操作,例如用户按下键盘上的“A”键时是想输入字符“A”还是输入“a”呢,当用户利用鼠标选中“删除”时是想彻底删除还是想放入回收站呢等等,以便于根据不同的情况,执行不同的具体操作。
为此Visual Basic专门定义了和键盘与鼠标有关的事件和方法。
8-1键盘操作当我们敲击一下键盘上的某个按键时,将会先后触发对应对象的KeyDown、KeyPress、(对于文本框之类的对象还会触发Change)、KeyUp等一系列事件。
根据不同的具体应用,我们可以选择不同的事件进行编程。
需要说明的是,对键盘的某个按键进行操作时,触发的是目前具有输入焦点(Focus)对象的事件。
一般情况下窗体对象不响应这些事件,除非满足下面几个条件:1.目前窗体上没有添加任何对象,则窗体接收键盘事件。
2.目前窗体上有对象,但是它们属于下面两种情况:1)这类对象不具有接收焦点的能力,例如:标签、框架、形状(Shape)、Timer、Image等等2)这类对象本来可以接收焦点(例如:文本框),但目前处于Disabled状态。
3.窗体的KeyPreview属性为True。
所谓KeyPreview的属性为True,就是说无论在窗体内的什么控件内利用键盘输入,都需要事先经过窗体进行检查。
其中,前两种情况下只触发窗体的KeyDown、KeyPress、KeyUp事件,第三种情况下将先后触发窗体的KeyDown、控件的KeyDown、窗体的KeyPress、控件的KeyPress、窗体的KeyUp、控件的KeyUp事件。
8-1-1 KeyPress事件KeyPress事件过程的的形式有两种:Private Sub 对象名_KeyPress(KeyAscii As Integer) '用于非控件数组Private Sub 对象名_KeyPress(Index As Integer, KeyAscii As Integer) '用于控件数组其中:KeyAscii的值在本过程中由系统自动提供,就是用户输入字符的ASCII值。
#define VK_RBU TTON0x02 鼠标右键#define VK_CAN CEL 0x03 Contro l-Break处理#define VK_MBU TTON 0x04 /* NOT contig uouswith L & RBUTTO N */ 鼠标中间键#define VK_BAC K 0x08 Backsp ace键#define VK_TAB0x09 Tab键#define VK_CLE AR 0x0C Clear键#define VK_RET URN 0x0D Enter键#define VK_SHI FT 0x10 Shift键#define VK_CON TROL0x11 Ctrl键#define VK_MEN U 0x12 Alt键#define VK_PAU SE 0x13#define VK_CAP ITAL0x14 Caps lock键#define VK_KAN A0x15#define VK_HAN GEUL 0x15 /* old name - should be here for compat ibili ty */#define VK_HAN GUL 0x15#define VK_JUN JA0x17#define VK_FIN AL 0x18#define VK_HAN JA0x19#define VK_KAN JI 0x19#define VK_ESC APE 0x1B Escape键#define VK_CON VERT0x1C#define VK_NON CONVE RT 0x1D#define VK_ACC EPT 0x1E#define VK_MOD ECHAN GE 0x1F#define VK_SPA CE 0x20 空格键#define VK_PRI OR 0x21 Page up键#define VK_NEX T 0x22 Page down键#define VK_END0x23 End键#define VK_HOM E 0x24 Home键#define VK_LEF T 0x25 左箭头键#define VK_UP0x26 上箭头键#define VK_RIG HT 0x27 右箭头键#define VK_DOW N 0x28 下箭头键#define VK_SEL ECT 0x29 Select键#define VK_PRI NT 0x2A#define VK_SNA PSHOT 0x2C Printscreen键#define VK_INS ERT 0x2D Insert键#define VK_DEL ETE 0x2E Delete键#define VK_HEL P 0x2F Help键/* VK_0 thru VK_9 are the same as ASCII'0' thru '9' (0x30 - 0x39) */ /* VK_A thru VK_Z are the same as ASCII'A' thru 'Z' (0x41 - 0x5A) */#define VK_LWI N 0x5B#define VK_RWI N 0x5C#define VK_APP S 0x5D#define VK_NUM PAD00x60 数字小键盘上的0#define VK_NUM PAD10x61#define VK_NUM PAD20x62#define VK_NUM PAD30x63#define VK_NUM PAD40x64#define VK_NUM PAD50x65#define VK_NUM PAD60x66#define VK_NUM PAD70x67#define VK_NUM PAD80x68#define VK_NUM PAD90x69#define VK_MUL TIPLY0x6A数字小键盘上的*#define VK_ADD0x6B 数字小键盘上的+#define VK_SEP ARATO R 0x6C 分隔符键#define VK_SUB TRACT0x6D 数字小键盘上的-#define VK_DEC IMAL0x6E 数字小键盘上的.#define VK_DIV IDE 0x6F 数字小键盘上的/#define VK_F10x70#define VK_F20x71#define VK_F30x72#define VK_F40x73#define VK_F50x74#define VK_F60x75#define VK_F70x76#define VK_F80x77#define VK_F90x78#define VK_F100x79#define VK_F110x7A#define VK_F120x7B#define VK_F130x7C#define VK_F140x7D#define VK_F150x7E#define VK_F160x7F#define VK_F170x80#define VK_F180x81#define VK_F190x82#define VK_F200x83#define VK_F210x84#define VK_F220x85#define VK_F230x86#define VK_F240x87#define VK_0 ... VK_9 0x30 - 0x39 0-9键#define VK_A ... VK_Z 0x41 - 0x5A A-Z键#define VK_NUM LOCK0x90#define VK_SCR OLL 0x91 Scroll Lock/** VK_L* & VK_R* - left and rightAlt, Ctrl and Shiftvirtua l keys.* Used only as parame tersto GetAsy ncKey State() and GetKey State().* No otherAPI or messag e will distin guish left and rightkeys in this way.*/#define VK_LSH IFT 0xA0#define VK_RSH IFT 0xA1#define VK_LCO NTROL0xA2#define VK_RCO NTROL0xA3#define VK_LME NU 0xA4 左Alt键#define VK_RME NU 0xA5 右Alt键#if(WINVER >= 0x0400)#define VK_PRO CESSK EY0xE5#endif/* WINVER >= 0x0400 */#define VK_ATT N 0xF6#define VK_CRS EL 0xF7#define VK_EXS EL 0xF8#define VK_ERE OF 0xF9#define VK_PLA Y0xFA#define VK_ZOO M 0xFB#define VK_NON AME 0xFC#define VK_PA10xFD#define VK_OEM_CLEA R 0xFEVK_OEM_1 BA Used for miscel laneo us charac ters; it can vary by keyboa rd.Window s 2000/XP: For the US standa rd keyboa rd, the ';:' keyVK_OEM_PLUS BB Window s 2000/XP: For any countr y/region, the '=+' keyVK_OEM_COMM A BC Window s 2000/XP: For any countr y/region, the ',<' keyVK_OEM_MINU S BD Window s 2000/XP: For any countr y/region, the '-_' keyVK_OEM_PERI OD BE Window s 2000/XP: For any countr y/region, the '>.' keyVK_OEM_2 BF Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the '/?' keyVK_OEM_3 C0 Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the '`~' key- C1-D7 Reserv ed- D8-DA Unassi gnedVK_OEM_4 DB Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the '[{' keyVK_OEM_5 DC Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the '\|' keyVK_OEM_6 DD Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the ']}' keyVK_OEM_7 DE Used for miscel laneo us charac ters; it can vary by keyboa rd. Window s 2000/XP: For the US standa rd keyboa rd, the '' "' key。
表一: ASCII码表 (完整版 )ASCII 值字符ASCII 值字符ASCII 值字符ASCII 值字符0NUT32(space)64@96、1SOH33!65A97a 2STX34”66B98b 3ETX35#67C99c 4EOT36$68D100d 5ENQ37%69E101e 6ACK38&70F102f7BEL39,71G103g 8BS40(72H104h 9HT41)73I105i 10LF42*74J106j11VT43+75K107k 12FF44,76L108l 13CR45-77M109m 14SO46.78N110n 15SI47/79O111o 16DLE48080P112p 17DCI49181Q113q 18DC250282R114r 19DC351383X115s 20DC452484T116t 21NAK53585U117u 22SYN54686V118v 23TB55787W119w 24CAN56888X120x 25EM57989Y121y 26SUB58:90Z122z 27ESC59;91[123{ 28FS60<92/124| 29GS61=93]125} 30RS62>94^126~ 31US63?95—127DEL注:特殊控制字符所代表含义NUL 空VT垂直制表SYN空转同步HT横向列表SOH 标题开始FF 走纸控制ETB信息组传送结束LF换行STX 正文开始CR 回车CAN 作废GS组分隔符ETX正文结束SO 移位输出EM纸尽NAK否定EOY传输结束SI移位输入SUB换置US单元分隔符ENQ询问字符DLE空格ESC换码DEL删除ACK承认BS 退一格FS文字分隔符RS记录分隔符DC1 设备控制 1DC2 设备控制 2DC3 设备控制 3DC4 设备控制 4BEL 报警表二: 104键盘码表 (完整版 )控制键常数值健描述常数值健描述vbKeyLButton1鼠标左键vbKeyPageDown34PageDown键vbKeyRButton2鼠标右键vbKeyEnd35End键vbKeyCancel3Cancel键vbKeyHome36Home键vbKeyMButton4鼠标中键vbKeyLeft37左方向键vbKeyBack8Backspace健vbKeyUp38上方向键vbKeyTab9Tab键vbKeyRight39右方向键vbKeyClear12Clear键vbKeyDown40下方向键vbKeyReturn13Enter键vbKeySelect41Select键vbKeyShift16Shift键vbKeyPrint42Print Screen键vbKeyControl17Ctrl键vbKeyExecute43Execute键vbKeyMenu18菜单键vbKeySnapshot44Snap Shot键vbKeyPause19Pause键vbKeyInser45Ins键vbKeyCapital20Caps Lock键vbKeyDelete46Del键vbKeyEscape27Esc键vbKeyHelp47Help键vbKeySpace32Spacebar键vbKeyNumlock144Num Lock键vbKeyPageUp33Page Up字母按健字母区数字键常数 (vbKeyA ~ vbKeyZ)<==> 键码 (65 ~ 90)<==> 字母 (A ~ Z) 健可对照 ASCII表常数 (vbKey0 ~ vbKey9 )<==> 键码 (48 ~ 57)<==> 数字 (0 ~ 9)健可对照 ASCII表数字小键盘区按键 F 功能健常数值健描述常数值健描述vbKeyNumpad096Num 0键vbKeyF1112F1键vbKeyNumpad197Num 1键vbKeyF2113F2键vbKeyNumpad298Num 2键vbKeyF3114F3键vbKeyNumpad399Num 3键vbKeyF4115F4键vbKeyNumpad4100Num 4键vbKeyF5116F5键vbKeyNumpad5101Num 5键vbKeyF6117F6键vbKeyNumpad6102Num 6键vbKeyF7118F7键vbKeyNumpad7103Num 7键vbKeyF8119F8键vbKeyNumpad8104Num 8键vbKeyF9120F9键vbKeyNumpad9105Num 9键vbKeyF10121F10 键vbKeyMultiply106(*)键vbKeyF11122F11 键vbKeyAdd107(+)键vbKeyF12123F12 键vbKeySeparator108Enter健vbKeyF13124F13 键vbKeySubtract109(-)键vbKeyF14125F14 键vbKeyDecimal110(.)键vbKeyF15126F15键vbKeyDivide111(/)键vbKeyF16127F16键庄子云:“人生天地之间,若白驹过隙,忽然而已。
3.1 USB鼠标发送的数据结构USB鼠标发送的数据为4字节,在第1字节中,bit0为左键(1为按下,0为未按下),bit1为右键(1为按下,0为未按下),bit3为中键(1为按下,0为未按下),剩余五位为0,这是为了凑够1字节而填充一些数据。
第2字节表示鼠标移动的X轴,是有符号的,正值表示鼠标向正半轴移动的相对距离,负值表示鼠标向负半轴移动的相对距离。
第3字节表示鼠标移动的Y轴,是有符号的,正值表示鼠标向正半轴移动的相对距离,负值表示鼠标向负半轴移动的相对距离。
第4字节表示滚轮移动的位移,是有符号的,正值表示滚轮向上移动的相对距离,负值表示滚轮向下移动的相对距离。
3.2 USB键盘发送和接收的数据结构USB键盘发送的数据为8字节,第1字节中的8位分别代表8个特殊按键:左Shift、左Ctrl、左Windows、左Alt、右Shift、右Ctrl、右Windows、右Alt;第2字节为0,该字节为保留字节,留给OEM使用;最后6个字节表示剩余的普通按键(键值表见下一节),也就是说标准USB键盘一次最多按下6个按键。
USB键盘接收的数据为1字节,是用来点亮键盘上的LED灯的控制信号,该字节的前5位依次表示数字键盘灯、大写锁定灯、滚动锁定灯以及日语、韩语的语种切换灯。
该字节的后3位为保留字节,和前面5位凑成1字节。
3.2 USB键盘的键值#define KEY_NULL 0x00#define KEY_A 0x04 //A#define KEY_B 0x05 //B#define KEY_C 0x06 //C#define KEY_D 0x07 //D#define KEY_E 0x08 //E#define KEY_F 0x09 //F#define KEY_G 0x0A //G#define KEY_H 0x0B //H#define KEY_I 0x0C //I#define KEY_J 0x0D //J#define KEY_K 0x0E //K#define KEY_L 0x0F //L#define KEY_M 0x10 //M#define KEY_N 0x11 //N#define KEY_O 0x12 //O#define KEY_P 0x13 //P#define KEY_Q 0x14 //Q#define KEY_R 0x15 //R#define KEY_S 0x16 //S#define KEY_T 0x17 //T#define KEY_U 0x18 //U#define KEY_V 0x19 //V#define KEY_W 0x1A //W#define KEY_X 0x1B //X#define KEY_Y 0x1C //Y#define KEY_Z 0x1D //Z#define KEY_1 0x1E //1 !#define KEY_2 0x1F //2 @#define KEY_3 0x20 //3 ##define KEY_4 0x21 //4#define KEY_5 0x22 //5#define KEY_6 0x23 //6#define KEY_7 0x24 //7#define KEY_8 0x25 //8#define KEY_9 0x26 //9#define KEY_0 0x27 //0#define KEY_ENTER 0x28#define KEY_ESC 0x29#define KEY_BACKSPACE 0x2A#define KEY_TAB 0x2B#define KEY_SPACE 0x2C#define KEY_SUB 0x2D // - and _ #define KEY_EQUAL 0x2E // = and + #define KEY_LEFT_BRACKET 0x2F // [ and { #define KEY_RIGHT_BRACKET 0x30 // ] and } #define KEY_VERTICAL_LINE 0x31 // "\" and | #define KEY_WAVE 0x32 // ` and ~#define KEY_SEMICOLON 0x33 // ; and : #define KEY_QUOTE 0x34 // ' and " #define KEY_THROW 0x35 // ~ and ` #define KEY_COMMA 0x36 // , and < #define KEY_DOT 0x37 // . and > #define KEY_QUESTION 0x38 // / and ? #define KEY_CAPS_LOCK 0x39#define KEY_F1 0x3A#define KEY_F2 0x3B#define KEY_F3 0x3C#define KEY_F4 0x3D#define KEY_F5 0x3E#define KEY_F6 0x3F#define KEY_F7 0x40#define KEY_F8 0x41#define KEY_F9 0x42#define KEY_F10 0x43#define KEY_F11 0x44#define KEY_F12 0x45#define KEY_PRT_SCR 0x46#define KEY_SCOLL_LOCK 0x47#define KEY_PAUSE 0x48#define KEY_INS 0x49#define KEY_HOME 0x4A#define KEY_PAGEUP 0x4B#define KEY_DEL 0x4C#define KEY_END 0x4D#define KEY_PAGEDOWN 0x4E#define KEY_RIGHT_ARROW 0x4F#define KEY_LEFT_ARROW 0x50#define KEY_DOWN_ARROW 0x51#define KEY_UP_ARROW 0x52#define KEY_PAD_NUMLOCK 0x53#define KEY_LCTRL0xE0//左ctrl0x01#define KEY_LALT0xE2//左Alt0x04#define KEY_LSHFIT0xE1//左Shift0x02#define KEY_LWIN0xE3//左windows0x08#define KEY_RWIN0xE7//右windows0x80#define KEY_RSHIFT0xE5//右Shift0x20。
值描述
0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键
0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键
A 至 Z 键与 A – Z 字母的 ASCII 码相同:
值描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键
0 至 9 键与数字 0 – 9 的 ASCII 码相同:
值描述
48 0 键
49 1 键
50 2 键
51 3 键
52 4 键
53 5 键
54 6 键
55 7 键
56 8 键
57 9 键
下列常数代表数字键盘上的键:
值描述
0x60 0 键
0x61 1 键
0x62 2 键
0x63 3 键
0x64 4 键
0x65 5 键
0x66 6 键
0x67 7 键
0x68 8 键
0x69 9 键
0x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (–) 键
0x6E DECIMAL POINT (.) 键 0x6F DIVISION SIGN (/) 键下列常数代表功能键:
值描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键。