Главная страница
    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
7-80312
RainKM
2003-12-05 19:34
2004.02.25
PS/2


4-80345
Mohamed
2003-12-19 02:47
2004.02.25
Pomogite c Button1Click:SetTimer


1-79750
JaoDaoDzen
2004-02-14 12:31
2004.02.25
привязка расширения файла к своей программе


8-80024
Igor_
2003-09-19 13:20
2004.02.25
Тормоза OpenGL


3-79577
VoimiX
2004-01-29 11:31
2004.02.25
удаление записи в MIDAS клиенте





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