SendKeys在Delphi 2010 [英] SendKeys in Delphi 2010

查看:172
本文介绍了SendKeys在Delphi 2010的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在视觉基础delphi中完成经典的 SendKeys('hello world'); ,但我发现你不能这样做。 / p>

有谁知道该怎么办?

解决方案

看看Win32 API keybd_event() SendInput() 功能。这两个函数都在Delphi的 Windows 单元中声明。



例如:

 使用
Windows;

程序SendKeys(const S:String);
var
I:整数;
begin
for I:= 1 to Length(S)do
begin
// keybd_event()不支持Unicode,所以你应该使用SendInput()来代替...
keybd_event(S [I],MapVirtualKey(S [I],0),0,0);
keybd_event(S [I],MapVirtualKey(S [I],0),KEYEVENTF_KEYUP,0);
结束
结束

 使用
Windows;

{$ POINTERMATH ON}
程序SendKeys(const S:String);
var
InputEvents:PInput;
I,J:整数;
begin
如果S =''然后退出;
GetMem(InputEvents,SizeOf(TInput)*(Length(S)* 2));
try
J:= 0;
为I:= 1 to Length(S)do
begin
InputEvents [J] .Itype:= INPUT_KEYBOARD;
InputEvents [J] .ki.wVk:= 0;
InputEvents [J] .ki.wScan:= Ord(S [I]);
InputEvents [J] .ki.dwFlags:= KEYEVENTF_UNICODE;
InputEvents [J] .ki.time:= 0;
InputEvents [J] .ki.dwExtraInfo:= 0;
Inc(J);
InputEvents [J] .Itype:= INPUT_KEYBOARD;
InputEvents [J] .ki.wVk:= 0;
InputEvents [J] .ki.wScan:= Ord(S [I]);
InputEvents [J] .ki.dwFlags:= KEYEVENTF_UNICODE或KEYEVENTF_KEYUP;
InputEvents [J] .ki.time:= 0;
InputEvents [J] .ki.dwExtraInfo:= 0;
Inc(J);
结束
SendInput(J,InputEvents [0],SizeOf(TInput));
finally
FreeMem(InputEvents);
结束
结束


Hi I'm trying to do the classic SendKeys ('hello world'); was done in visual basic delphi but I discovered that you can not do that.

Does anyone know how to do?

解决方案

Look at the Win32 API keybd_event() and SendInput() functions. Both functions are declared in Delphi's Windows unit.

For example:

uses
  Windows;

procedure SendKeys(const S: String);
var
  I: Integer;
begin
  for I := 1 to Length(S) do
  begin
    // keybd_event() does not support Unicode, so you should use SendInput() instead...
    keybd_event(S[I], MapVirtualKey(S[I], 0),0, 0);
    keybd_event(S[I], MapVirtualKey(S[I], 0), KEYEVENTF_KEYUP, 0);
  end;
end;

uses
  Windows;

{$POINTERMATH ON}
procedure SendKeys(const S: String);
var
  InputEvents: PInput;
  I, J: Integer;
begin
  if S = '' then Exit;
  GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2));
  try
    J := 0;
    for I := 1 to Length(S) do
    begin
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[I]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
    end;
    SendInput(J, InputEvents[0], SizeOf(TInput));
  finally
    FreeMem(InputEvents);
  end;
end;

这篇关于SendKeys在Delphi 2010的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆