Obsługa dodatkowych klawiszy myszy

Odpowiedz Nowy wątek
2014-11-21 00:29
gość___
0

Witam!!
Na podstawie postu - Manipulacja kółkiem od myszki robię program, który ma odpowiednio reagować na dodatkowe klawisze myszy (4 i 5-ty przycisk, które są z boku). Według tego wykrywane są one pod numerem 523 wciśnięte i 524 puszczone. Problem polega na tym, że oba zwracają tą wartość i nie wiem jak je rozróżnić.
Proszę o pomoc.

Pozostało 580 znaków

2014-11-21 01:17
0

Według tego wykrywane są one

Według czego?

edytowany 1x, ostatnio: Azarien, 2014-11-21 01:17

Pozostało 580 znaków

2014-11-21 01:20
gość___
0

No jak sobie wpiszę Form1.Label1.Caption:=floattostr(wparam); to mi wyświetla te wartości

Pozostało 580 znaków

2014-11-21 01:30
0

A od kiedy typ WParam jest zmiennoprzecinkowy?

A co do pytania, to nie mam takiej myszki. Ale kombinował bym z tym co zwracane jest w strukturze odczytywanej w Hooku. Trzeba by poczytać i potestować według http://msdn.microsoft.com/en-[...]esktop/ms644970(v=vs.85).aspx i pokrewne wpisy.

Wedle tego http://msdn.microsoft.com/en-[...]esktop/ms644986(v=vs.85).aspx faktycznie za kod klawisza odpowiada WParam, ale jeśli sterownik myszki jest ok napisany, to z pewnością te klawisze muszą się dać jakoś rozróżnić. Więcej nie jestem bez myszki w stanie wymyśleć.

Poza tym kod do symulowania wciskania/puszczania klawiszy jest tam nie do końca elegancki i prawidlowy. Na przykład źle zasymuluje Control dla gier DirectX. Powinno to wyglądać tak:

procedure KeyDownUp(KeyToSend : Byte; KeyDown : boolean);
const
  DownUp_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_KEYUP);
  Extended_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_EXTENDEDKEY);
var
  Input : TagINPUT;
  KeyExtended : boolean;
begin
  Input.Itype := INPUT_KEYBOARD;
  Input.ki.wVK := KeyToSend;
  Input.ki.wScan := MapVirtualKey(KeyToSend, 0);
  KeyExtended := KeyToSend in [VK_CONTROL, VK_LCONTROL, VK_RCONTROL,
    VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME, VK_END, VK_PRIOR,
    VK_NEXT, VK_INSERT, VK_DELETE, VK_MENU];
  Input.ki.dwFlags := DownUp_Flags_Arr[not KeyDown] or Extended_Flags_Arr[KeyExtended];
  Input.ki.time := 0;
  SendInput(1, Input, SizeOf(Input));
end;

edytowany 5x, ostatnio: furious programming, 2014-11-21 14:04
Wybacz, źle połączyłem poniższe posty... :) - furious programming 2014-11-21 14:04

Pozostało 580 znaków

2014-11-21 01:53
gość___
0

Dobra, mam. Podobnie jak w przypadku kółka pomogło

 MS.mouseData shr 16 

4-ty przicisk zwraca 1, a 5-ty 2 ;) Dzięki za pomoc!!

Spokojnie ;) Już miałem do czynienia z hookiem na klawiaturę, który był dobrze zrobiony i był bardzo podobny do tego Twojego na mysz ;) Trochę go przerobiłem dla siebie ;)

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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