Zwolnienie prawego shift'a

Zwolnienie prawego shift'a
GM
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
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.:

Kopiuj
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ć :

Kopiuj
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.

MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:dzień
0

Spróbuj tego:

Kopiuj

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:

Kopiuj

SymulujKeyDown(VK_RSHIFT);

SymulujKeyDown(VK_HOME);
SymulujKeyUp(VK_HOME);

SymulujKeyUp(VK_RSHIFT);

lub

Kopiuj

SymulujKeyDown(VK_RSHIFT);

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

SymulujKeyUp(VK_RSHIFT);

Pzdr.
Marogo

GM
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
0

Dziękuję bardzo za pomoc i pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.