Hook na WM_MOUSEWHEEL i pobranie kierunku scrollowania...

0

czesc
szukalem, sprawdzalem i nie znalazlem niczego co by dzialalo.
jak zalozyc hooka i pobierac kierunek scrollowania rolka myszy?

dzieki
pozdr

0

akurat szukam projektu, który mi wcięło :( i przeglądając cały śmietnik u siebie natknąłem się na coś takiego:

na formie mam taką zadeklarowaną procedurę w sekcji private:

procedure Myszka(var Msg: TMessage); message WM_MOUSEWHEEL;

a definicja:

procedure TForm1.Myszka(var Msg: TMessage);
begin
  //drugi parametr w perform:
  //0: krótki skok w górę (tj kliknięcie w trójkącik paska)
  //1: krótki skok w dół
  //2: długi skok w górę (tj kliknięcie w jaśniejsze pole na pasku)
  //3: długi skok w dół
  //4: przesunięcie do początku
  //7: przesunięcie do końca

  if Msg.wParam > 0 then
    begin
    ScrollBox1.Perform(WM_VSCROLL, 0, 0);
    end
    else
      begin
      ScrollBox1.Perform(WM_VSCROLL, 1, 0);
      end;
end;

to miało służyć do przesuwania scrolbox'a - może się przyda ;)

0

dzieki. ale to chyba zadziala tylko dla mojego okna. a ja chce zeby dzialalo dla calego systemu.

0
cimak napisał(a)

szukalem, sprawdzalem i nie znalazlem niczego co by dzialalo.

??? nie od dzis na forum jestes, a hooki sa wszedzie ...
u mnie nawet ten przyklad dziala z komunikatem WM_MOUSEWHEEL

Jak założyć globalnego Hooka na klawiaturę

0

wiem, juz tak robilem. tylko za cholere nie moge wyiagnac informacji o kierunku "rolowania" :-/
i zeby nie bylo: korzystalem z sdk :-P

0

a z WH_MOUSE_LL ?

0
reichel napisał(a)

a z WH_MOUSE_LL ?

probowalem. tylko nie pamietam dokladnie, wiem ze raz udalo mi sie odczytac poprawnie wartosc "delty", jednak jedynie w oknie mojego programu. jak wyjezdzalem po za to program sie sypal (i ciagnal za soba delphi);/
ale skoro mowisz, ze powinno dzialac to bede jeszcze probowal z tym (na razie nie mam czasu)...

dzieki
pozdr

0

hahaha, dzieki reichel [!!!] [browar]
nie wiem zupelnie czemu wczesniej to rozwiazanie mi umknelo, przysiagl bym ze juz go probowalem ;]

const 
  WH_MOUSE_LL = 14; 

type 
  TMsLLHookStruct = packed record 
    pt : TPoint; 
    mouseData : DWORD; 
    flags : DWORD; 
    time : DWORD; 
    dwExtraInfo : DWORD; 
  end; 
  PMsLLHookStruct = ^TMsLLHookStruct;
function HookProc(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;
var
  MS : PMsLLHookStruct;
  delta:integer;
begin
if (Code = HC_ACTION) and (wParam = WM_MOUSEWHEEL) then
    begin
    MS := PMsLLHookStruct(lParam);
    delta:=ms.mouseData;
    if delta>0
        then form1.Memo1.Lines.Add('W gore!');
    if delta<0
        then form1.Memo1.Lines.Add('W dol!');
    end;
Result := CallNextHookEx(HookID, Code, wParam, lParam)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HookID := SetWindowsHookEx(WH_MOUSE_LL, @HookProc, hInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnHookWindowsHookEx(HookID);
end;
</delphi>
0

czesc.
wracam do tematu bo teraz mam z tym hookiem inny problem: jak np zaczne ogladac filmiki na yt, albo inny proces zaczyna wykonywac jakies wieksze obliczenia to kursor mi sie "tnie". da sie to jakos naprawic, czy taki juz urok hookow? zakladam, ze nadanie mojemu programowi priorytetu "time critical" nie jest prawidlowym rozwiazaniem ;]

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