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

Вниз

Перехват нажатия на 3-ю кнопку крысы   Найти похожие ветки 

 
Арр'акктур ©   (2004-01-24 20:44) [0]

Нужно реализовать перехват нажатия на 3-ю кнопку крысы. Притом так, чтобы это работало
даже тогда, когда окно приложения убрано куда-нибудь далеко.

Пожалуйста, подскажите, как это сделать и если можно, то с подробным примером.


 
Flipman   (2004-01-24 21:24) [1]

Используй DirectInput. Могу дать код:

unit UseInput;

interface

uses
Windows,DirectInput8;

var
DInput : IDirectInput8 = nil;
DIMouse : IDirectInputDevice8 = nil;
MouseState : TDIMOUSESTATE2;

procedure InitDirectInput(Wnd : HWND);
procedure ReadMouse();
procedure CloseDirectInput;

implementation

procedure ReadMouse();
var
Res : HRESULT;
begin
ZeroMemory(@MouseState, SizeOf(MouseState));
Res := DIMouse.GetDeviceState(SizeOf(TDIMOUSESTATE2),@MouseState);
if Failed(Res) then
begin
DIMouse.Acquire;
while Res = DIERR_INPUTLOST do Res := DIMouse.Acquire;
end;

if MouseState.rgbButtons[2] = 128 then
begin
//Действия
end;
end;

procedure CloseDirectInput;
begin
if Assigned(DIMouse) then DIMouse.Unacquire;
if Assigned(DIMouse) then DIMouse := nil;
if Assigned(DInput) then DInput := nil;
end;

procedure InitDirectInput(Wnd : HWND);
var
DiPDW : TDIPropDword;
DF : TDIDataFormat;
begin
DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, DInput, nil);

Dinput2.CreateDevice(GUID_SysMouse, DIMouse, nil);

DF := c_dfDIMouse2;
DIMouse.SetDataFormat(DF);

DIMouse.SetCooperativeLevel(Wnd, DISCL_NONEXCLUSIVE or DISCL_BACKGROUND); {Может быть вместо DISCL_BACKGROUND - DISCL_FOREGROUND, точно не помню}

DIMouse.Acquire;
end;

end.

Для этого тебе понадобится модуль DirectInput8 (к сожалению ссылку дать не могу).


 
Дубинин Алексей ©   (2004-01-24 23:03) [2]

Самый простой и верный способ это поставить глобальную ловушку. В форумах огромное количество раз об этом говорилось. Если лень ползать и искать, пиши мне на ящик... вышлю примеры.

С уважением, Дубинин Алексей.


 
DriveSoft ©   (2004-01-25 12:18) [3]

Самый простой способ опрашивать в таймере
IF GetAsyncKeyState (VK_MBUTTON)<>0 Then ...


 
XenonXX ©   (2004-01-26 04:42) [4]

У меня крыса с 5-ю кнопками. Как поймать остальные две? для них констант же нету!


 
GrayFace ©   (2004-02-01 13:32) [5]

Ты решил опрашивать в таймере?? Это самый плохой и ненадежный способ.


 
Palladin ©   (2004-02-01 15:22) [6]

http://www.delphimaster.ru/articles/hooks/index.html



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

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

Наверх




Память: 0.48 MB
Время: 0.025 c
1-79820
romeo
2004-02-10 11:27
2004.02.25
Обработка исключений во время отладки без показа сообщ. об ошибке


14-80190
Manulo
2004-01-30 18:53
2004.02.25
Женский калькулятор


14-80291
Soft
2004-02-01 12:28
2004.02.25
Ученые раскрыли тайну русского алкоголизма


1-79846
Тимохов
2004-02-10 17:21
2004.02.25
Delphi+WinApi II


1-79742
Юлия
2004-02-11 07:45
2004.02.25
Как удалить файлы?