Главная страница
    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.45 MB
Время: 0.04 c
1-79701
kentavr
2004-02-12 20:29
2004.02.25
EXE


14-80130
Карелин Артем
2004-02-02 15:36
2004.02.25
Как разрешить юзеру в Linux монтировать и размонтировать диски?


14-80244
Soft
2004-02-03 23:32
2004.02.25
Укуренный философ.


3-79681
Vi0let
2004-01-27 07:17
2004.02.25
Как обработать OnCellClick при dgRowSelect = true


14-80242
able
2004-02-03 16:20
2004.02.25
Задержка.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский