|
#1
|
|||
|
|||
"Блокировка" мыши
Привет форумчане
Нужная программа находится функцией FindWindow. Как можно блокировать нажатие (правой) кнопки мыши именно для этой программы (окна)? |
#2
|
||||
|
||||
Я бы делал через Hook. На этом форуме или в гугле полно примеров.
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
Bargest, а можно в примерах объяснить?
|
#4
|
||||
|
||||
Для этого есть специальные места. Просто мне писать трактаты по полному описанию нет смысла, тем более за меня это уже сделали.
Главный тык Тык 2 Тык 3 И т.д. И на delphisources было не раз: Тык 4 Тык 5 Только не советую "тупо копипастить". jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.12.2011 в 19:19. |
#5
|
|||
|
|||
Bargest, по книге "Delphi-Глазами хакера" нашел готовый код и изменил его для Калькулятора (результат: в калькуляторе не должна "нажиматься" правая кнопка мыши) так:
PHP код:
Вот сама библиотека: PHP код:
НО ВСЕ ТАКИ КОНТЕКСТНОЕ МЕНЮ ОТОБРАЖАЕТСЯ, как можно блокировать это? |
#6
|
||||
|
||||
Я бы сделал иначе. Если окно под мышью - калькулятор, то НЕ вызываем следующий хук (callNextHookEx), иначе вызываем.
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
|||
|
|||
Bargest я исправил код на следующее:
PHP код:
но все равно не помогло, в этом случае я даже не смог кликать в других окнах, как бы мышь не работает. И еще одно, оказывается: PHP код:
Пожалуйста, подскажите как быть? |
#8
|
||||
|
||||
Код:
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall; begin if code = HC_ACTION then begin Wnd := TMsg(Pointer(lParam)^).hwnd; if (Wnd=hd)or(GetParent(Wnd)=hd) then result:=1 else result:=CallNextHookEx(SysHook, Code, wParam, lParam); end; end; jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
|||
|
|||
Bargest на вашем листинге нету же кода "блокировки" правой кнопки мыши
|
#10
|
||||
|
||||
Зато там есть остановка цепочки хуков. Я же писал выше: не советую просто копировать код, лучше разберитесь. В моей программе аналогичный код, работает, как часы.
А, ну да. Естественно надо еще сделать проверку, что это именно правая кнопка мыши, и для других кнопок использовать всё тот же CallNextHookEx. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 27.12.2011 в 18:51. |
#11
|
|||
|
|||
Bargest, удалось определить нужное окно при нажатии правой кнопки мыши. Осталось блокировать контекст меню...Поискал, прочитал много стаей, в одном из них написали что достигли это с помощью EndMenu.
Но увы и это мне не помогло. Вот библиотека: PHP код:
Что посоветуете? |
#12
|
||||
|
||||
Я же не спроста написал выше:
Код:
result:=1; А вот всякие ухищрения вроде попыток убрать меню и пр. бесполезны - хук обрабатывается до того, как сообщение о нажатии кнопки мыши дойдет до окна калькулятора, а значит до того, как это меню отобразится. [лирическое отступление] Вообще убрать уже открывшееся меню может быть крайне трудной задачей - например, ничто не мешает по нажатию правой кнопки мыши просто-напросто нарисовать белый прямоугольник с текстом в нем, и при движении мыши подсвечивать разные строки. И отловить такое "открытие меню" будет почти невозможно, не говоря уже о том, чтобы стереть это "меню" и восстановить предыдущее изображение, да вдобавок отключить обработчики движения мыши над картинкой. Так что лучше сделать так, чтобы сообщение о ПКМ просто не добиралась до интересующего окна.[/лирическое отступление] jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 28.12.2011 в 17:00. |
#13
|
|||
|
|||
Bargest, слава Богу, решение найдено, вот отрывок из библиотеки:
PHP код:
Спасибо вам за внимание и за поддержку. |