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
Here are some of the functions I've assembled to use in some automation projects I had to do in past. They utilize keybd_event() API.
procedure SendKeys(const AString: String; const AAmount: Integer = 1);
const
TReadableChars = [32..126];
TShiftChars = [33..43, 58, 60, 62..90, 94..95, 123..126];
type
TKeyInfo = record
AsChar : Char;
AsOrd : Integer;
VK : Integer;
SC : Integer;
UseShift: Boolean;
end;
TKeys = TList;
var
key : TKeyInfo;
keys : TKeys;
C1, C2: Integer;
begin
keys := TKeys.Create;
try
for C1 := 1 to Length(AString) do
begin
key.AsChar := AString[C1];
key.AsOrd := Ord(key.AsChar);
if key.AsOrd in TReadableChars then
begin
key.VK := VkKeyScan(key.AsChar);
key.UseShift := key.AsOrd in TShiftChars;
key.SC := MapVirtualKey(key.VK, 0);
keys.Add(key);
end;
end;
for C1 := 1 to AAmount do
for C2 := 0 to keys.Count - 1 do
begin
key := keys[C2];
if key.UseShift then
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(key.VK, key.SC, 0, 0);
keybd_event(key.VK, key.SC, KEYEVENTF_KEYUP, 0);
if key.UseShift then
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
finally
keys.Free;
end;
end;
procedure SendKey(const AVKCode: Integer; const AAmount: Integer = 1);
var
C1: Integer;
begin
for C1 := 1 to AAmount do
begin
keybd_event(AVKCode, 0, 0, 0);
keybd_event(AVKCode, 0, KEYEVENTF_KEYUP, 0);
end;
end;