Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Sendinput (mayúsculas/minúsculas) (https://www.clubdelphi.com/foros/showthread.php?t=90718)

jocaro 19-08-2016 12:32:36

Sendinput (mayúsculas/minúsculas)
 
Hola

Al enviar con SendInput una secuencia de letras mayúsculas y minúsculas mediante un bucle del siguiente código,
una secuencia como abcDEFghi se convierte en abcDEFGHI.

Parece que una vez que se simula la pulsación de una mayúscula, la tecla VK_SHIFT no se libera mediante el
KEYEVENTF_KEYUP.

No se que estoy haciendo mal, ¿alguien que me pueda ayudar?

Código Delphi [-]
aDatPul.Itype := INPUT_KEYBOARD;
aDatPul.ki.wScan := 0;

{ Tecla mayúscula}
begin
  { Pulsar tecla shift key para mayusculas }
  aDatPul.ki.dwFlags := KEYEVENTF_EXTENDEDKEY;
  aDatPul.ki.wVk := VK_LSHIFT;
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );

  { Pulsar tecla carácter en mayúsculas }
  aDatPul.ki.dwFlags := 0;
  aDatPul.ki.wVk := CodTec;  // Virtual Code
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );

  { Soltar tecla carácter en mayúsculas }
  aDatPul.ki.dwFlags := KEYEVENTF_KEYUP;
  aDatPul.ki.wVk := CodTec;  // Virtual Code
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );

  { Soltar tecla shift key }
  aDatPul.ki.dwFlags := KEYEVENTF_KEYUP and KEYEVENTF_EXTENDEDKEY;
  aDatPul.ki.wVk := VK_LSHIFT;
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );
end
else
{ Tecla minúscula }
begin
  { Pulsar tecla carácter en minúsculas }
  aDatPul.ki.dwFlags := 0;
  aDatPul.ki.wVk := CodTec;  // Virtual Code
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );

  { Soltar tecla carácter en minúsculas }
  aDatPul.ki.dwFlags := KEYEVENTF_KEYUP;
  aDatPul.ki.wVk := CodTec;  // Virtual Code
  SendInput( 1, &aDatPul, sizeof( aDatPul ) );
end;

Gracias. Un saludo

escafandra 25-08-2016 13:39:13

Código Delphi [-]
procedure SimKey(VK: BYTE; Down: boolean);
var
  Input: TInput;
begin
  ZeroMemory(@Input, sizeof(Input));
  Input.iType:= INPUT_KEYBOARD;
  Input.ki.wVk:= VK;
  Input.ki.wScan:= MapVirtualKey(VK, 0);
  Input.ki.dwFlags:= KEYEVENTF_EXTENDEDKEY;
  if not Down then
    Input.ki.dwFlags:= Input.ki.dwFlags or KEYEVENTF_KEYUP;
  windows.SendInput(1, Input, sizeof(TInput));
end;


Saludos.


La franja horaria es GMT +2. Ahora son las 05:13:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi