Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published 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;

type

WBytes = array[0..pred(SizeOf(Word))] of Byte;

TSendKey = record

Name : 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)

);


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759