Форум: "Потрепаться";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизПерехват нажатия на 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c