Lo he usado para enviar texto a una molesta aplicación emergente 3G sin interfaz, es un hack ya que no nos queda ninguna opción.
procedure TForm1.TypeMessage(Msg: string);
var
CapsOn: boolean;
i: integer;
ch: char;
shift: boolean;
key: short;
begin
CapsOn := (GetKeyState(VK_CAPITAL) and $1) <> 0;
for i:=1 to length(Msg) do
begin
ch := Msg[i];
ch := UpCase(ch);
if ch <> Msg[i] then
begin
if CapsOn then
begin
keybd_event(VK_SHIFT, 0, 0, 0);
end;
keybd_event(ord(ch), 0, 0, 0);
keybd_event(ord(ch), 0, KEYEVENTF_KEYUP, 0);
if CapsOn then
begin
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
end
else
begin
key := VKKeyScan(ch);
// UpperCase
if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
((key and $100) > 0) then
begin
keybd_event(VK_SHIFT, 0, 0, 0);
end;
keybd_event(key, 0, 0, 0);
keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
((key and $100) > 0) then
begin
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
end;
end;
end;
esperanza de que ayuda a
ACTUALIZACIÓN
Editado para permitir que otros personajes (no alpha) es decir, cambió los números! "£ $ etc.
¿Has probado SendInput todavía? –
¿Tiene que ser Delphi? Mira Autohotkey. –