当前位置:主页>仓库管理软件> 列表

模拟键盘输入(keybd_event的使用)!!!看者有分

仓库管理软件版1楼: 我想做个系列号输入工具,不知道怎么模拟键盘输入,代码:
procedure TForm1.hotkey(var msg: tmessage);
var
i: integer;
myclip: TClipboard; //剪贴板类
mykey: string;
temp: string;
begin
myclip := TClipboard.Create; //创建剪贴板类实例
if myclip.HasFormat(cf_text) then //如果剪贴板中内容是文本
begin
mykey := myclip.AsText; //把文本内容付给mykey
if mykey <> '''' then //当剪贴板内容不为空,循环
begin
for i := 1 to length(mykey) do
begin
temp := copy(mykey, i, 1); //获得第i个字符给temp
if temp = ''-'' then
begin
keybd_event(9,0,0,0);
keybd_event(9,0,KEYEVENTF_KEYUP,0); //当是''-''时按下TAB键
end
else
begin
keybd_event(****, 0, 0, 0);
keybd_event(****, 0,keyeventf_keyup, 0);
end;
end;
end;
myclip.Free;
end;
end;
星号那个地方不知道怎么输入?temp怎么转成虚拟键码?

50分,帮帮忙!!

2楼: 看keybd_event的帮助,找到虚拟键码的规律,查表或循环。 如财务软件使用

3楼: 我看过别人写的,他在星号那里这样写:ord(upcase(temp[i])),他是用数组,我这样写
ord(upcase(temp))就出现类型不匹配的错误,我仔细看了,才知道当temp是char类型就成功ord(upcase(''a'')),但是我的temp是string,怎么把string转成char?函数pchar(temp)或者char(temp)都换不了!
查表或循环!可以说清楚点吗?两个相同的问题150分哦!帮帮忙!!

4楼: 看不懂,有分吗?

5楼: 有!1分!呵呵!

6楼: 靠天靠地,还不如靠自己!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Forms, Clipbrd; //加入clipbrd剪贴板

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
aatom: integer;
procedure hotkey(var msg: Tmessage); message wm_hotkey; //捕获热键消息
{ Private declarations }
public
{ Public declarations }
end;

var


Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
aatom := globaladdatom(''hot key''); //添加全局原子
RegisterHotKey(handle, aatom, 0, VK_F10); //注册热键F10
end;

procedure TForm1.hotkey(var msg: Tmessage);
var
myclip: tclipboard; //剪贴板类
mykey: string; //用来存放剪贴板的内容
i: integer;
begin
//***********************************************获取剪贴板的内容
myclip := tclipboard.Create; //建立剪贴板实例
if myclip.HasFormat(cf_text) then //检查剪贴板内容是否为文本,不是则退出
if myclip.AsText <> '''' then //如果内容不为空,则把内容放到mykey变量中
mykey := myclip.AsText
else
exit
else
exit;
//***********************************************获取剪贴板的内容
for i := 1 to length(mykey) do //获取文本的长度作为循环的次数
begin
if mykey[i] = ''-'' then
begin
keybd_event($9, 0, 0, 0); //如果内容中碰到''-''则输入TAB键(TAB的虚拟键值是$9),进入下个输入框
keybd_event($9, 0, KEYEVENTF_KEYUP, 0);
end
else
begin
keybd_event(ord(upcase(mykey[i])), 0, 0, 0);
keybd_event(ord(upcase(mykey[i])), 0, KEYEVENTF_KEYUP, 0);
//输入剪贴板的内容到输入框
// keybd_event(ord(upcase(mykey[i])), 0, 0, 0)虚拟按下键盘
// keybd_event(ord(upcase(mykey[i])), 0, KEYEVENTF_KEYUP, 0)虚拟抬起
//因为我们按键的时候是按下,然后抬起,所以要对应
end;
end;
end;
end.