// 模拟键盘输入一串字符。 procedure TypeKeyString(s: string); var c: Char; i: integer; off: integer; vkw: Word; begin for i := 1 to Length(s) do begin c := s[i]; if (c < #128) then begin vkw := VkKeyScan(c); off := 0; if vkw and $100 = $100 then keybd_event(VK_SHIFT, 0, off, 0); if vkw and $200 = $200 then keybd_event(VK_CONTROL, 0, off, 0); if vkw and $400 = $400 then keybd_event(VK_MENU, 0, off, 0); off := 0; keybd_event(Byte(vkw), 0, off, 0); //sleep(20); off := off or KEYEVENTF_KEYUP; keybd_event(Byte(vkw), 0, off, 0); off := off or KEYEVENTF_KEYUP; if vkw and $100 = $100 then keybd_event(VK_SHIFT, 0, off, 0); if vkw and $200 = $200 then keybd_event(VK_CONTROL, 0, off, 0); if vkw and $400 = $400 then keybd_event(VK_MENU, 0, off, 0); end; end; end;
MainHandle,EditHandle :HWND;
str: array [0..254] of char;
begin
MainHandle := FindWindow('Notepad','ic.txt - 记事本'); //找到记事本程序窗口句柄
EditHandle := FindWindowEx(MainHandle, 0, 'Edit', '' ); //找到记事本程序上的Edit控件.
str := '就这么简单';
SendMessage(EditHandle, WM_SETTEXT, length(str){你要发送的文字长度},lparam(@str[0]));
end;注意: 下面这条语句最好只执行一次.EditHandle := FindWindowEx(MainHandle, 0, 'Edit', '' ); //找到记事本程序上的Edit控件.我来告诉你为什么:看一下FindWindowEx函数的参数就明白了. 第一个参数是父窗口句柄,第二个参数是下一个子窗口句柄,第三个参数是你要找的窗口类名,第四个是窗口标题.记事本的edit的窗口标题就是你编辑的内容. 所以EditHandle最好是在第一次取得后,保存为一个全局的.
我的本意是无论什么应用程序(不一定是notepad),只要在前台的,并且能够接受文本输入的,在当前焦点下(不一定是edit),就可以接受卡的芯片号
听有人说,可以用keyboardEvent来实现,怎么用法?
procedure TypeKeyString(s: string);
var
c: Char;
i: integer;
off: integer;
vkw: Word;
begin
for i := 1 to Length(s) do
begin
c := s[i];
if (c < #128) then
begin
vkw := VkKeyScan(c);
off := 0;
if vkw and $100 = $100 then
keybd_event(VK_SHIFT, 0, off, 0);
if vkw and $200 = $200 then
keybd_event(VK_CONTROL, 0, off, 0);
if vkw and $400 = $400 then
keybd_event(VK_MENU, 0, off, 0); off := 0;
keybd_event(Byte(vkw), 0, off, 0);
//sleep(20);
off := off or KEYEVENTF_KEYUP;
keybd_event(Byte(vkw), 0, off, 0); off := off or KEYEVENTF_KEYUP;
if vkw and $100 = $100 then
keybd_event(VK_SHIFT, 0, off, 0);
if vkw and $200 = $200 then
keybd_event(VK_CONTROL, 0, off, 0);
if vkw and $400 = $400 then
keybd_event(VK_MENU, 0, off, 0);
end;
end;
end;