SendKeys在Delphi 2010 [英] SendKeys in Delphi 2010
本文介绍了SendKeys在Delphi 2010的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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屋!
查看全文