czesc
szukalem, sprawdzalem i nie znalazlem niczego co by dzialalo.
jak zalozyc hooka i pobierac kierunek scrollowania rolka myszy?
dzieki
pozdr
czesc
szukalem, sprawdzalem i nie znalazlem niczego co by dzialalo.
jak zalozyc hooka i pobierac kierunek scrollowania rolka myszy?
dzieki
pozdr
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 ;)
dzieki. ale to chyba zadziala tylko dla mojego okna. a ja chce zeby dzialalo dla calego systemu.
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
wiem, juz tak robilem. tylko za cholere nie moge wyiagnac informacji o kierunku "rolowania" :-/
i zeby nie bylo: korzystalem z sdk :-P
a z WH_MOUSE_LL ?
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
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>
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 ;]