Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
8-80043
JS
2003-10-25 16:51
2004.02.25
Алгоритм уменьшения глубины цвета


3-79561
Крутыш
2004-01-29 14:42
2004.02.25
Проблемы с Ado.


1-79751
Alex*
2004-02-12 09:32
2004.02.25
PasteSpecial в Excele.


1-79850
VolanD2002
2004-02-13 16:11
2004.02.25
DelphiColor to PascalColor


1-79721
Denisoid
2004-02-12 16:59
2004.02.25
Вопрос по работе с ShellListView !!!




   Наверх