Zwolnienie prawego shift'a

Odpowiedz Nowy wątek
2010-06-28 18:20

Rejestracja: 10 lat temu

Ostatnio: 6 lat temu

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.

Pozostało 580 znaków

2010-06-30 08:49

Rejestracja: 11 lat temu

Ostatnio: 13 minut temu

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

Pozostało 580 znaków

2010-06-30 13:53

Rejestracja: 10 lat temu

Ostatnio: 6 lat temu

0

Dziękuję bardzo za pomoc i pozdrawiam.

Pozostało 580 znaków

Odpowiedz

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