用Delphi模拟键盘输入

   在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);

  

  mouse_event最好配合setcursorpos(x,y)函数一起使用,与 Keybd_event类似,mouse_event有五个参数,第一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为 MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y相对位置,一般可设为0,第四五个参数并不重 要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。下面是关于 mouse_event的示例代码:

 

setcursorpos(20,132);

mouse_event(MOUSEEVENTF_LEFTDOWN,255)">mouse_event(MOUSEEVENTF_LEFTUP,0); ...

   上面的代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。  

   注意,不管是模拟键盘还是鼠标事件,都要注意还原,即按完键要松开,一个keydown对应一个keyup;鼠标单击 完也要松开, 不然可能影响程序的功能。  

 

模拟键盘输入首先要用到一个API函数:keybd_event。
  我们是菜鸟,所以不必具体去理解它的详细用法,只要按以下方法使用即可了!呵呵!
  模拟按键有两个基本动作,即按下键和放开按键,所以我们每模拟一次按键就要调用两次该API函数,其方法是:
  
  例子1:模拟按下'A'键
   keybd_event(65,0);
   keybd_event(65,70); font-family:simsun; font-size:14px">   例子2:模拟按下'ALT+F4'键
   keybd_event(18,0);
   keybd_event(115,0);
   keybd_event(18,255)">   附:常用模拟键的键值对照表。

                      键盘键与虚拟键码对照表

      字母和数字键     数字小键盘的键       功能键         其它键
      键   键码     键   键码       键   键码     键      键码
      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 18 Alt键
VK_PAUSE 19 Pause键
VK_CAPITAL 14 20 Caps Lock键
VK_ESCAPE 1B 27 Ese键
VK_SPACE 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 50 2键
VK_3 51 3键
VK_4 52 4键
VK_5 53 5键
VK_6 54 6键
VK_7 55 7键
VK_8 56 8键
VK_9 57 9键
VK_A 65 A键
VK_B 66 B键
VK_C 67 C键
VK_D 68 D键
VK_E 69 E键
VK_F 70 F键
VK_G 71 G键
VK_H 72 H键
VK_I 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 80 P键
VK_Q 81 Q键
VK_R 82 R键
VK_S 83 S键
VK_T 84 T键
VK_U 85 U键
VK_V 86 V键
VK_W 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 99 数字键3键
VK_NUMPAD4 64 100 数字键4键
VK_NUMPAD5 101 数字键5键
VK_NUMPAD6 102 数字键6键
VK_NUMPAD7 103 数字键7键
VK_NUMPAD8 104 数字键8键
VK_NUMPAD9 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 112 F1键
VK_F2 113 F2键
VK_F3 114 F3键
VK_F4 115 F4键
VK_F5 116 F5键
VK_F6 117 F6键
VK_F7 118 F7键
VK_F8 119 F8键
VK_F9 120 F9键
VK_F10 121 F10键
VK_F11 7A 122 F11键
VK_F12 7B 123 F12键
VK_NUMLOCK 144 Num Lock 
VK_SCROLL 91 145 Scroll Lock键
上面没有提到的:(都在大键盘) VK_LWIN 左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_OEM_CLEAR清除主要

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都是大家转来转去,原文出处我已经找不到了。这篇文章写的很不错,但最后部分“PermuteFunction 的终极版本”描述的不太清楚,完全按照该文章代码执行,是不行的。可能是作者故意这样做的?本文最后提供修正后的下载地址。原文如下:一、关于API Hook1.什么是API Hook不知道大家是否还记得,在DO
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都是大家转来转去,原文出处我已经找不到了。 这篇文章写的很不错,但最后部分“PermuteFunction 的终极版本”描述的不太清楚,完全按照该文章代码执行,是不行的。需要修改mess.pas中代码才行。其实文中提到的一个结构,代码中并没有使用typePIMAGE_IMPORT_DESCRIPTOR = ^IMA
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c++ 调用, 抽空研究了一下该库的最新版 ,把部分api 翻译成了dephi版的 记录一下 地址 ffmpegvcl.zip
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的功能是:将源操作数送到目的操作数中,即:(dst) <--(src) 1.dst和src类型必须匹配,即必须同为字节
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂,比较少用。 2.WinExec主要运行EXE文件。如:WinExec('Notepad.exe Readme.txt', SW_SHOW); 3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。 首先必须引用shellapi
API原型: Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) 参数 类型及说明 lpExistingFileName String,欲移
附带通用控件安装方法: ---------- 基本安装 1、对于单个控件,Componet-->install component..-->PAS或DCU文件-->install; 2、对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可; 3、对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可; 4
type   TRec=Record     msg:string;     pic:TMemoryStream; end; procedure TForm2.BitBtn1Click(Sender: TObject); var   ms:TMemoryStream;   Rec1,Rec2:TRec;   cc:tmemorystream;   jpg:TJPEGImage; begin   R
program Project1; { Types and Structures Definition } type   WNDCLASSEX = packed record     cbSize: LongWord;     style: LongWord;     lpfnWndProc: Pointer;     cbClsExtra: Integer;     cbWndExtra: In
   在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂 的,或重复性的操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这主要是通过两个API函数来实现的。      下面以Delphi为例来介绍一下如何实现这两个功能。模拟键盘我们用Keybd_event这个ap
delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) of Object; 两者样子差不多但实际意义却不一样, TMouseProc只是单一的函数指针类型; TMouseEvent是对象的函数指针,也就是对象/类的函数/方法 区
Windows 2000/XP和2003等支持一种叫做"服务程序"的东西.程序作为服务启动有以下几个好处:     (1)不用登陆进系统即可运行.     (2)具有SYSTEM特权.所以你在进程管理器里面是无法结束它的.     笔者在2003年为一公司开发机顶盒项目的时候,曾经写过课件上传和媒体服务,下面就介绍一下如何用Delphi7创建一个Service程序.     运行Delphi7,选
方法一: 1.调试delphi 写的服务程序,有这么一个办法。原来每次都是用attach to process方法,很麻烦。并且按照服务线程的执行线路,可能会停不到想要的断点。笨办法是,在procedure TsvcFrm.ServiceExecute(Sender: TService);中想要下断的语句前加个人定胜天的sleep(20000),但实际上这种办法是主观臆测的。可行,没问题。记得大学
Delphi For iOS开发指南(17):让应用程序禁止竖屏(也就是只显示横屏)     最近好多人问,怎么样让Delphi For iOS开发的应用程序禁止竖屏,也就是想让它一直横屏显示,横屏是好,一行可以放好几个控件,表格的话也可以多显示几列,看起来方便。 只要一句代码就可以让Delphi For iOS开发的应用程序禁止竖屏,如下: Application.FormFactor.Orie
一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了。 [Setup] ; 注: AppId的值为单独标识该应用程序。 ; 不要为其他安装程序使用相同的AppId值。 ; (生成新的GUID,点击 工具|在IDE中生成GUID。) AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675} ;程序名 AppName
在Delphi自带的Indy控件中其实是提供了MD2,MD4,MD5对象的,我们可以直接使用它们来完成MD5的签名算法。而不需要再去找其它的DLL或是Pas了。 在Uses单元中引用 IdHashMessageDigest,IdGlobal, IdHash 单元,再写如下代码即可以达到MD5的实现。 示例代码 procedure TForm1.Button1Click(Sender: TObjec
在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下: 1 2 3 4 5 6 7 8 9 _NOTIFYICONDATAA = record    cbSize: DWORD;    Wnd: HWND;    uID: UINT;    uFlags: UINT;    uCallback
声明: 1. type Name = Existing type; 2. type Name = type Existing type; 3. type Name = (EnumValue1 [=value], EnumValue2 [=value] ...); 4. type Name = Expression1..Expression2; 5. type Name = ^Existing ty