用Delphi模拟键盘输入

2019-04-14 18:20发布

在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这主要是通过两个API函数来实现的。     下面以Delphi为例来介绍一下如何实现这两个功能。模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。大家不用担心,在delphi里调用api函数是很方便的事。     先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。 Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行。第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下i键,其中的$49表示i键的虚拟键值: keybd_event($49,0,0,0); keybd_event($49,0,KEYEVENTF_KEYUP,0); ...         mouse_event最好配合setcursorpos(x,y)函数一起使用,与 Keybd_event类似,mouse_event有五个参数,第一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为 MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。下面是关于 mouse_event的示例代码:   setcursorpos(20,132); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); ...    上面的代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。      注意,不管是模拟键盘还是鼠标事件,都要注意还原,即按完键要松开,一个keydown对应一个keyup;鼠标单击 完也要松开,不然可能影响程序的功能。         模拟键盘输入首先要用到一个API函数:keybd_event。
  我们是菜鸟,所以不必具体去理解它的详细用法,只要按以下方法使用即可了!呵呵!
  模拟按键有两个基本动作,即按下键和放开按键,所以我们每模拟一次按键就要调用两次该API函数,其方法是:
  
  例子1:模拟按下'A'键
   keybd_event(65,0,0,0);
   keybd_event(65,0,KEYEVENTF_KEYUP,0);   例子2:模拟按下'ALT+F4'键
   keybd_event(18,0,0,0);
   keybd_event(115,0,0,0);
   keybd_event(115,0,KEYEVENTF_KEYUP,0);
   keybd_event(18,0,KEYEVENTF_KEYUP,0);    附:常用模拟键的键值对照表。                       键盘键与虚拟键码对照表       字母和数字键     数字小键盘的键       功能键         其它键
      键   键码     键   键码       键   键码     键      键码
      A   65       0   96        F1   112     Backspace    8
      B   66       1   97        F2   113     Tab       9
      C   67       2   98        F3   114     Clear      12
      D   68       3   99        F4   115     Enter      13
      E   69       4   100       F5   116     Shift      16
      F   70       5   101       F6   117     Control     17
      G   71       6   102       F7   118      Alt       18
      H   72       7   103       F8   119     Caps Lock    20
      I   73       8   104       F9   120     Esc       27
      J   74       9   105       F10  121     Spacebar    32
      K   75       *   106       F11  122     Page Up     33
      L   76       +   107       F12  123     Page Down    34
      M   77       Enter 108       --   --     End       35
      N   78       -   109       --   --      Home      36
      O   79       .   110       --   --      Left Arrow   37
      P   80       /   111       --   --      Up Arrow    38
      Q   81       --   --       --   --      Right Arrow   39
      R   82       --   --       --   --      Down Arrow    40
      S   83       --   --       --   --      Insert      45
      T   84       --   --       --   --      Delete      46
      U   85       --   --       --   --      Help       47
      V   86       --   --       --   --      Num Lock     144
      W   87          
      X   88      
      Y   89      
      Z   90      
      0   48      
      1   49      
      2   50       
      3   51       
      4   52       
      5   53       
      6   54       
      7   55       
      8   56       
      9   57      好了,希望本文能让你对模拟键盘和鼠标按键有个初步的了解,如果想更深入的了解其中的奥妙,可以查阅详实的msdn在线帮助,并多多动手实践。 附:更详细的键值表: 常数名称 十六进制值 十进制值 对应按键 VK_LBUTTON 01 1 鼠标的左键 VK_RBUTTON 02 2 鼠标的右键 VK-CANCEL 03 3 Ctrl+Break(通常不需要处理) VK_MBUTTON 04 4 鼠标的中键(三按键鼠标) VK_BACK 08 8 Backspace键 VK_TAB 09 9 Tab键 VK_CLEAR 0C 12 Clear键(Num Lock关闭时的数字键盘5) VK_RETURN 0D 13 Enter键 VK_SHIFT 10 16 Shift键 VK_CONTROL 11 17 Ctrl键 VK_MENU 12 18 Alt键 VK_PAUSE 13 19 Pause键 VK_CAPITAL 14 20 Caps Lock键 VK_ESCAPE 1B 27 Ese键 VK_SPACE 20 32 Spacebar键 VK_PRIOR 21 33 Page Up键 VK_NEXT 22 34 Page Domw键 VK_END 23 35 End键 VK_HOME 24 36 Home键 VK_LEFT 25 37 LEFT ARROW 键(←) VK_UP 26 38 UP ARROW键(↑) VK_RIGHT 27 39 RIGHT ARROW键(→) VK_DOWN 28 40 DOWN ARROW键(↓) VK_Select 29 41 Select键 VK_PRINT 2A 42 VK_EXECUTE 2B 43 EXECUTE键 VK_SNAPSHOT 2C 44 Print Screen键(抓屏) VK_Insert 2D 45 Ins键(Num Lock关闭时的数字键盘0) VK_Delete 2E 46 Del键(Num Lock关闭时的数字键盘.) VK_HELP 2F 47 Help键 VK_0 30 48 0键 VK_1 31 49 1键 VK_2 32 50 2键 VK_3 33 51 3键 VK_4 34 52 4键 VK_5 35 53 5键 VK_6 36 54 6键 VK_7 37 55 7键 VK_8 38 56 8键 VK_9 39 57 9键 VK_A 41 65 A键 VK_B 42 66 B键 VK_C 43 67 C键 VK_D 44 68 D键 VK_E 45 69 E键 VK_F 46 70 F键 VK_G 47 71 G键 VK_H 48 72 H键 VK_I 49 73 I键 VK_J 4A 74 J键 VK_K 4B 75 K键 VK_L 4C 76 L键 VK_M 4D 77 M键 VK_N 4E 78 N键 VK_O 4F 79 O键 VK_P 50 80 P键 VK_Q 51 81 Q键 VK_R 52 82 R键 VK_S 53 83 S键 VK_T 54 84 T键 VK_U 55 85 U键 VK_V 56 86 V键 VK_W 57 87 W键 VK_X 58 88 X键 VK_Y 59 89 Y键 VK_Z 5A 90 Z键 VK_NUMPAD0 60 96 数字键0键 VK_NUMPAD1 61 97 数字键1键 VK_NUMPAD2 62 98 数字键2键 VK_NUMPAD3 62 99 数字键3键 VK_NUMPAD4 64 100 数字键4键 VK_NUMPAD5 65 101 数字键5键 VK_NUMPAD6 66 102 数字键6键 VK_NUMPAD7 67 103 数字键7键 VK_NUMPAD8 68 104 数字键8键 VK_NUMPAD9 69 105 数字键9键 VK_MULTIPLY 6A 106 数字键盘上的*键 VK_ADD 6B 107 数字键盘上的+键 VK_SEPARATOR 6C 108 Separator键 VK_SUBTRACT 6D 109 数字键盘上的-键 VK_DECIMAL 6E 110 数字键盘上的.键 VK_DIVIDE 6F 111 数字键盘上的/键 VK_F1 70 112 F1键 VK_F2 71 113 F2键 VK_F3 72 114 F3键 VK_F4 73 115 F4键 VK_F5 74 116 F5键 VK_F6 75 117 F6键 VK_F7 76 118 F7键 VK_F8 77 119 F8键 VK_F9 78 120 F9键 VK_F10 79 121 F10键 VK_F11 7A 122 F11键 VK_F12 7B 123 F12键 VK_NUMLOCK 90 144 Num Lock 键 VK_SCROLL 91 145 Scroll Lock键 上面没有提到的:(都在大键盘) VK_LWIN 91 左win键 VK_RWIN 92 右win键 VK_APPS 93 右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单 186 ;(分号) 187 =键 188 ,键(逗号) 189 -键(减号) 190 .键(句号) 191 /键 192 `键(Esc下面) 219 [键 220 键 221 ]键 222 ‘键(引号) delphi虚拟键码对应关键 VK_LBUTTON鼠标左键 VK_RBUTTON鼠标右键 VK_CANCEL控制+休息 VK_MBUTTON鼠标中键 VK_BACK Backspace键 VK_TAB Tab键 VK_CLEAR清除主要 VK_RETURN Enter键 VK_SHIFT Shift键 VK_CONTROL Ctrl键 VK_MENU Alt键 VK_PAUSE暂停关键 VK_CAPITAL Caps Lock键 VK_KANA可与输入法 VK_HANGUL可与输入法 VK_JUNJA可与输入法 VK_FINAL可与输入法 VK_HANJA可与输入法 VK_KANJI可与输入法 VK_CONVERT可与输入法 VK_NONCONVERT可与输入法 VK_ACCEPT可与输入法 VK_MODECHANGE可与输入法 VK_ESCAPE Esc键 VK_SPACE空间酒吧 VK_PRIOR页键 VK_NEXT下一页关键 VK_END END键 VK_HOME主页关键 VK_LEFT左箭头键 VK_UP向上键 VK_RIGHT右箭头键 VK_DOWN下箭头键 VK_SELECT选择关键 VK_PRINT打印键(键盘的具体) VK_EXECUTE执行关键 VK_SNAPSHOT Print Screen键 VK_INSERT插入关键 VK_DELETE Delete键 VK_HELP帮助关键 VK_LWIN左Windows键(微软键盘) VK_RWIN右Windows键(微软键盘) VK_APPS应用关键(微软键盘) VK_NUMPAD0 0键(数字键盘) VK_NUMPAD1 1键(数字键盘) VK_NUMPAD2 2键(数字键盘) VK_NUMPAD3 3键(数字键盘) VK_NUMPAD4 4键(数字键盘) VK_NUMPAD5 5键(数字键盘) VK_NUMPAD6 6键(数字键盘) VK_NUMPAD7 7键(数字键盘) VK_NUMPAD8 8键(数字键盘) VK_NUMPAD9 9键(数字键盘) VK_MULTIPLY多键(数字键盘) VK_ADD添加键(数字键盘) VK_SEPARATOR分离键(数字键盘) VK_SUBTRACT减去键(数字键盘) VK_DECIMAL小数点键(数字键盘) VK_DIVIDE鸿沟键(数字键盘) VK_F1 F1键 VK_F2 F2键 VK_F3 F3的关键 VK_F4 F4键 VK_F5 F5键 VK_F6 F6键 VK_F7 F7键 VK_F8 F8键 VK_F9 F9键 VK_F10 F10键关键 VK_F11 F11键 VK_F12 F12键 VK_F13 F13键 VK_F14 F14键 VK_F15 F15键 VK_F16 F16键 VK_F17 F17键 VK_F18 F18键 VK_F19 F19键 VK_F20 F20键 VK_F21 F21键 VK_F22 F22键 VK_F23 F23键 VK_F24 F24键 VK_NUMLOCK数Lock键 VK_SCROLL滚动Lock键 VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState ) VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState ) VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState ) VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState ) VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState ) VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState ) VK_PROCESSKEY工艺关键 VK_ATTN经办关键 VK_CRSEL CrSel关键 VK_EXSEL ExSel关键 VK_EREOF擦除EOF分析关键 VK_PLAY发挥关键 VK_ZOOM变焦关键 VK_NONAME保留以供将来使用 VK_PA1 PA1关键 VK_OEM_CLEAR清除主要标签数: 1 “ F14键 VK_F15 F15键 VK_F16 F16键 VK_F17 F17键 VK_F18 F18键 VK_F19 F19键 VK_F20 F20键 VK_F21 F21键 VK_F22 F22键 VK_F23 F23键 VK_F24 F24键 VK_NUMLOCK数Lock键 VK_SCROLL滚动Lock键 VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState ) VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState ) VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState ) VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState ) VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState ) VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState ) VK_PROCESSKEY工艺关键 VK_ATTN经办关键 VK_CRSEL CrSel关键 VK_EXSEL ExSel关键 VK_EREOF擦除EOF分析关键 VK_PLAY发挥关键 VK_ZOOM变焦关键 VK_NONAME保留以供将来使用 VK_PA1 PA1关键 VK_OEM_CLEAR清除主要