Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
8-80023
Юрий Ёлкин
2003-10-26 22:10
2004.02.25
Как склеить два рисунка


14-80090
Igor_thief
2004-02-02 20:27
2004.02.25
ListBox


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


1-79993
Uriel
2004-02-13 13:42
2004.02.25
FindFirst & FindNext


1-79886
ORMADA
2004-02-09 11:51
2004.02.25
TStream





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский