· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Ещё маленький вопросик

Посл.отвђт Сообщенiе


Дата: Апр 15, 2004 13:19:39

Подскажите, пожалуйста, как можно отключить у мышки среднюю кнопку, причем даже windows не должна видеть как средняя кнопка нажимается, от загрузки и до выключения.

А нажатия этой самой средней кнопки надо обрабатывать по-своему, например, подсчитывать их за какой-то интервал. И давать пользоваться этой информацией своему приложению.


Дата: Апр 15, 2004 13:27:39 · Поправил: prog

Может фильтер-драйвер мыши?


Дата: Апр 15, 2004 19:25:07

WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
обрабатывай это глобальным хуком!


Дата: Апр 15, 2004 21:35:13

А по-подробнее можно? А то я в этой теме плаваю :(


Дата: Апр 15, 2004 21:44:10 · Поправил: KiNDeR

Подробней здесь:
h t t p://www.wasm.ru/article.php?article=1021007
и здесь:
h t t p://www.wasm.ru/article.php?article=1001024

И еще, тебе надо чтобы мыша не реагировала на среднюю кнопку только в твоей проге или во всей системе?
Оъяни задачу подробней.


Дата: Апр 15, 2004 22:07:00 · Поправил: prog

Я думал надо отрабатывать клики в фоновом режиме, а потом чтобы запустить прогу и чтобы она могла инфу по кликам получить себе.
Для этого вроде фильтер-драйвер самое то.


Дата: Апр 15, 2004 22:20:24

2Scorp - короче, ставишь хук на
WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
и не возвращаешь, управление винде считаешь эти клики и
используешь их в своих инетесах.
Минус - если не возвращать обработку событыя дальше по цепи, есть вероятност повесить систему, но если все сделать грамотно, это можно избежать.


Дата: Апр 15, 2004 22:33:43

Scorp

Это сама прога:

.386p
.model flat, stdcall
jumps
include win32.inc
includelib c:\coder\tasm\lib\import32.lib
include external.inc
.data
ms MSGSTRUCT <?,?,?,?,?,?>
hPrg dd ?
hHookWnd dd ?
name: db 'mousehook',0
.code
start:
xor ebx,ebx
call GetModuleHandleA,ebx
mov hPrg,eax
call CreateMutexA,ebx,1,offset name
call GetLastError
or eax,eax
jnz AlreadyRun

call InstallMessageHook,ebx


mov edi,offset ms
message_loop:
call GetMessageA,edi,ebx,ebx,ebx
test eax,eax
jz exit_msg_loop
call TranslateMessage,edi
call DispatchMessageA,edi
jmp short message_loop
exit_msg_loop:
call UnInstallMessageHook
AlreadyRun:
call ExitProcess,ebx
ends
end start

Это dll к ней:

.386p
.model flat, stdcall
jumps
include win32.inc
includelib c:\coder\tasm\lib\import32.lib
include chookdll.ext
public DllEntryPoint
public InstallMessageHook
public UnInstallMessageHook
;public MessageHook


.data
IDDll dd ?
hWnd dd ?
hHook dd ?
.code
start:
DllEntryPoint proc Histance:dword, Reason:dword, \
Reserved:dword
mov eax,Histance
mov IDDll,eax
ExitEntry:
mov eax,1
ret
DllEntryPoint endp
InstallMessageHook proc uses ebx edi esi, hwnd:DWORD
mov eax,hwnd
mov hWnd,eax
call SetWindowsHookExA,WH_MOUSE,offset MessageHook,IDDll,0
mov hHook,eax
ret
InstallMessageHook endp

UnInstallMessageHook proc
call UnhookWindowsHookEx,hHook
ret
UnInstallMessageHook endp

MessageHook proc uses ebx edi esi, MyCode:DWORD, \
wparam:DWORD, lparam:DWORD
xor eax,eax
inc eax
cmp wparam,WM_MBUTTONDOWN
je @ret1
cmp wparam,WM_MBUTTONDBLCLK
je @ret1
cmp wparam,WM_MBUTTONUP
je @ret1
xor eax,eax
ret
@ret1:
; ВОТ ТУТ ТВОЙ ОБРАБОТЧИК

ret
MessageHook endp
ends
end start

Вот и все собственно....
если с компилить в таком виде как есть - будет вообще рубить среднюю кнопку, вставишь свой обработчик...


Дата: Апр 16, 2004 14:44:45

Ух ты, спасибо Mad_C.
Как я понимаю после загрузки этой проги винда больше не видит средней кнопки вообще. Это хорошо :)

А если запустить её тормозить ничего не будет?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048