Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:12:02 delphi模拟按下键盘上的某个键
delphi模拟按下键盘上的某个键
模拟按下键盘上的某个键模拟按下键盘上的某个键,可以帮助用户解决只能利用键盘输入的问题。例如自动填表软件,可以将预先设定的内容分别添加到相应的选项中,用户不用一一填写。下面编写一个实现模拟键盘输入的示例,单击“开始模拟”按钮,然后程序将演示输入字符串“’abc123{left}{left}{left}def{end}456{left 6}ghi{end}789”的过程({left 6}相当于按6次鼠标左键)。本例通过调用Windows 提供的API 函数keybd_event 来模拟键盘的行为。keybd_event 的函数声明如下:VOID keybd_event(BYTE bVk, //虚拟键值BYTE bScan, //扫描值DWORD dwFlags, //各种函数功能DWORD dwExtraInfo //额外信息);通过如下调用实现输入延迟现象。PeekMessage(KeyboardMsg,0,WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)现在开始编写程序。(1)创建一个新项目,添加一个RichEdit 组件和一个按钮,按钮的标题设为“开始模拟”,RichEdit组件用来接受键盘的输入。(2)添加模拟键盘输入的函数SendKeys,它有两个参数,第1 个是要输入的字符串,第2 个是是否需要延时,代码如下:Function SendKeys(SendKeysString : PChar; Wait : Boolean) : Boolean;typeWBytes = array[0..pred(SizeOf(Word))] of Byte;TSendKey = recordName : ShortString;VKey : Byte;end;const{SendKeys 可以识别的键值:}MaxSendKeyRecs = 41;SendKeyRecs : array[1..MaxSendKeyRecs] of TSendKey =((Name:’BKSP’; VKey:VK_BACK),(Name:’BS’; VKey:VK_BACK),(Name:’BACKSPACE’; VKey:VK_BACK),(Name:’BREAK’; VKey:VK_CANCEL),(Name:’CAPSLOCK’; VKey:VK_CAPITAL),(Name:’CLEAR’; VKey:VK_CLEAR),(Name:’DEL’; VKey:VK_DELETE),(Name:’DELETE’; VKey:VK_DELETE),(Name:’DOWN’; VKey:VK_DOWN),(Name:’END’; VKey:VK_END),(Name:’ENTER’; VKey:VK_RETURN),(Name:’ESC’; VKey:VK_ESCAPE),(Name:’ESCAPE’; VKey:VK_ESCAPE),(Name:’F1’; VKey:VK_F1),(Name:’F10’; VKey:VK_F10),(Name:’F11’; VKey:VK_F11),(Name:’F12’; VKey:VK_F12),(Name:’F13’; VKey:VK_F13),(Name:’F14’; VKey:VK_F14),(Name:’F15’; VKey:VK_F15),(Name:’F16’; VKey:VK_F16),(Name:’F2’; VKey:VK_F2),(Name:’F3’; VKey:VK_F3),(Name:’F4’; VKey:VK_F4),(Name:’F5’; VKey:VK_F5),(Name:’F6’; VKey:VK_F6),(Name:’F7’; VKey:VK_F7),(Name:’F8’; VKey:VK_F8),(Name:’F9’; VKey:VK_F9),(Name:’HELP’; VKey:VK_HELP),(Name:’HOME’; VKey:VK_HOME),(Name:’INS’; VKey:VK_INSERT),(Name:’LEFT’; VKey:VK_LEFT),(Name:’NUMLOCK’; VKey:VK_NUMLOCK),(Name:’PGDN’; VKey:VK_NEXT),(Name:’PGUP’; VKey:VK_PRIOR),(Name:’PRTSC’; VKey:VK_PRINT),(Name:’RIGHT’; VKey:VK_RIGHT),(Name:’SCROLLLOCK’; VKey:VK_SCROLL),(Name:’TAB’; VKey:VK_TAB),(Name:’UP’; VKey:VK_UP));
赞