Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Как перехватить событие MouseWheelUp MouseWheelDown   Найти похожие ветки 

 
HF-Trade ©   (2006-02-17 12:21) [0]

Здравствуйте Господа, Такой вопросик -
Есть такая функция
GetAsyncKeyState
С помощью нее можно узнать была ли нажата конпка мыши\клавиатуры.
А как узнать что было событие колесика =)
В НЕ ОБЛАСТИ ФОРМЫ.


 
begin...end ©   (2006-02-17 12:27) [1]

Хук?


 
HF-Trade ©   (2006-02-17 12:41) [2]

Да пофигу как)))
Сама функция какая?)
(Вообщет лучше без хука, я в таймер загнал).


 
begin...end ©   (2006-02-17 12:48) [3]

> HF-Trade ©   (17.02.06 12:41) [2]

Функции: SetWindowsHookEx/CallNextHookEx/UnhookWindowsHookEx.

Тип хука: WH_MOUSE_LL (не требует создания DLL, но возможен только для NT-систем) или WH_MOUSE (требует создания DLL, но работает как в NT, так и в 9x).

Примеры есть в интернете.

> Вообщет лучше без хука, я в таймер загнал

Вообще-то, лучше с хуком. Потому что тогда таймер будет не нужен, и Ваша процедура ловушки будет вызываться именно тогда, когда нужно -- при нажатии кнопок мыши (WM_LBUTTONDOWN/WM_RBUTTONDOWN/...) или при прокрутке колеса (WM_MOUSEWHEEL).


 
КаПиБаРа ©   (2006-02-17 12:49) [4]

HF-Trade ©   (17.02.06 12:41) [2]
Вообщет лучше без хука, я в таймер загнал


В таймер...
это методологически неверно. Делай через хук, что бы потом не переписывать.


 
HF-Trade ©   (2006-02-17 12:57) [5]

Все дело в том что если с хуком то у при нажатии на колесико(как на среднюю кнопку) у человека виснет все намертво.))) Я не знаю почему=)  У меня все норм. Помимо этого дальнейший обработчик эмулирует пару кликов мыши с задержками и ее перемещение, вообщем чтоб работало ПРАВИЛЬНО - приходится снимать хук в начале обработчика, а в конце его снова ставить. Проверял иначе на секунду подвисает окно в котором эмулируется клик.

> begin...end ©  

А можно пример WH_MOUSE_LL (для ХР, без ДЛЛ).


 
КаПиБаРа ©   (2006-02-17 13:16) [6]

HF-Trade ©   (17.02.06 12:57) [5]
Попробуй у него запустить простую тестовую программу с хуком, которая подсчитывает количество нажатий на кнопку мыши и выводит на форму.
Если будет работать, то причина зависания в твоей программе. Если тоже будет виснуть выкладывай сюда код.


 
HF-Trade ©   (2006-02-17 13:28) [7]

Да дал я ему на тест - говорит кнопка для снятия хука вообще не нажимается.
Через раз все виснет...
Вот код -

Var
 HookHandle: hHook;
implementation

{$R *.dfm}

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
 msg: PEVENTMSG;
begin
 if Code >= 0 then begin
   result := 0;
   msg := Pointer(LParam);
   with Form1 do
     case msg.message of

       WM_MBUTTONDOWN:
       CheckBox3.Checked:=True;

       WM_MBUTTONUP:
       CheckBox3.Checked:=False;

       WM_LBUTTONDOWN:
       CheckBox1.Checked:=True;

       WM_LBUTTONUP:
       CheckBox1.Checked:=False;

        WM_RBUTTONDOWN:
        CheckBox2.Checked:=True;
 
       WM_RBUTTONUP:
       CheckBox2.Checked:=False;

     end;
 end

 else
   Result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
UnhookWindowsHookEx(HookHandle);
end;


 
КаПиБаРа ©   (2006-02-17 14:19) [8]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=548


 
begin...end ©   (2006-02-17 16:28) [9]

> HF-Trade ©   (17.02.06 12:57) [5]

> А можно пример WH_MOUSE_LL (для ХР, без ДЛЛ).

const
 WH_MOUSE_LL = 14;
var
 H: HHOOK;

function HookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
type
 PMSLLHOOKSTRUCT = ^MSLLHOOKSTRUCT;
 MSLLHOOKSTRUCT = packed record
   pt: TPoint;
   mouseData: Cardinal;
   flags: Cardinal;
   time: Cardinal;
   dwExtraInfo: DWORD;
 end;
const
 Fmt = "CursorX = %d CursorY = %d WheelDelta = %d";
begin
 if (code = HC_ACTION) and (wparam = WM_MOUSEWHEEL) then
   with PMSLLHOOKSTRUCT(lparam)^ do
     MessageBox(0,
                PChar(Format(Fmt, [pt.X, pt.Y, SmallInt(HiWord(mouseData)) div WHEEL_DELTA])),
                "WM_MOUSEWHEEL",
                0);
 Result := CallNextHookEx(0, code, wparam, lparam)
end;

begin
 H := SetWindowsHookEx(WH_MOUSE_LL, HookProc, HInstance, 0)
end.



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.057 c
2-1139850113
YK
2006-02-13 20:01
2006.03.05
Какие ещё библиотеки??? И в чем дело??


3-1136983239
Asail
2006-01-11 15:40
2006.03.05
Нужна помощь в написании запроса SQL (SELECT)


2-1140252679
Urvin
2006-02-18 11:51
2006.03.05
Поймать событие зезактивации формы


15-1139565712
Koala
2006-02-10 13:01
2006.03.05
Планшет? какой выбрать....?


2-1140078068
VanDet
2006-02-16 11:21
2006.03.05
Здраствуйте помогите мне написать программу