Zwolnienie prawego shift'a

0

Witam. Zna ktoś z forumowiczów sposób na zwolnienie prawego shift'a gdy jest w kombinacji z innym klawiszem ,bo oczywiści jak wiadomo standardowy sposób nie działa.Czyli np.:

Keybd_event(VK_RSHIFT,0,0,0);
Keybd_event(Ord(VK_HOME),0,0,0);
Keybd_event(Ord(VK_HOME),0,KEYEVENTF_KEYUP,0);
Keybd_event(VK_RSHIFT,0,KEYEVENTF_KEYUP,0);

Sposób olesio :
Czyli po powyższym kodzie należałoby dać :

SetForegroundWindow(Application.Handle);
Keybd_event(VK_RSHIFT,0,KEYEVENTF_KEYUP,0);

Lecz sposób olesio odpada ponieważ wymaga aktywacji okna aplikacji ,a co powoduje dezaktywację innego okna ,a taka sytuacja przy moim programie nie może mieć miejsca.

Mam nadzieję ,że zna ktoś inny sposób na zwolnienie tego nieszczęsnego klawisza. Pozdrawiam.

0

Spróbuj tego:


Procedure SymulujKeyDown(Key: Cardinal); 
  Var
  Input: tagINPUT;
 Begin
  Input.Itype:=INPUT_KEYBOARD;
  Input.ki.wVK:=Key;
  Input.ki.wScan:=MapVirtualKey(Key, 0);

  If Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,
             VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE]
    then Input.ki.dwFlags:=KEYEVENTF_EXTENDEDKEY
    else Input.ki.dwFlags:=0;
  Input.ki.time:=0;
  SendInput(1, Input, SizeOf(Input));
 end;

Procedure SymulujKeyUp(Key: Cardinal);
  Var
  Input: tagINPUT;
 Begin
   Input.Itype:=INPUT_KEYBOARD;
   Input.ki.wVK:=Key;
   Input.ki.wScan:=MapVirtualKey(Key, 0);

   If Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,
              VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE]
     then Input.ki.dwFlags:=KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY
     else Input.ki.dwFlags:=KEYEVENTF_KEYUP;
   Input.ki.time:=0;
   SendInput(1, Input, SizeOf(Input));
 end;

Przykład użycia:


SymulujKeyDown(VK_RSHIFT);

SymulujKeyDown(VK_HOME);
SymulujKeyUp(VK_HOME);

SymulujKeyUp(VK_RSHIFT);

lub


SymulujKeyDown(VK_RSHIFT);

SymulujKeyDown(Ord('A'));
SymulujKeyUp(Ord('A'));

SymulujKeyUp(VK_RSHIFT);

Pzdr.
Marogo

0

Dziękuję bardzo za pomoc i pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1