![]() |
|
|
#1
|
|||
|
|||
|
Привет форумчане
Нужная программа находится функцией FindWindow. Как можно блокировать нажатие (правой) кнопки мыши именно для этой программы (окна)? |
|
#2
|
||||
|
||||
|
Я бы делал через Hook. На этом форуме или в гугле полно примеров.
|
|
#3
|
|||
|
|||
|
Bargest, а можно в примерах объяснить?
|
|
#4
|
||||
|
||||
|
Для этого есть специальные места. Просто мне писать трактаты по полному описанию нет смысла, тем более за меня это уже сделали.
Главный тык Тык 2 Тык 3 И т.д. И на delphisources было не раз: Тык 4 Тык 5 Только не советую "тупо копипастить". Последний раз редактировалось Bargest, 25.12.2011 в 19:19. |
|
#5
|
|||
|
|||
|
Bargest, по книге "Delphi-Глазами хакера" нашел готовый код и изменил его для Калькулятора (результат: в калькуляторе не должна "нажиматься" правая кнопка мыши) так:
PHP код:
Вот сама библиотека: PHP код:
НО ВСЕ ТАКИ КОНТЕКСТНОЕ МЕНЮ ОТОБРАЖАЕТСЯ, как можно блокировать это? |
|
#6
|
||||
|
||||
|
Я бы сделал иначе. Если окно под мышью - калькулятор, то НЕ вызываем следующий хук (callNextHookEx), иначе вызываем.
|
|
#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; |
|
#9
|
|||
|
|||
|
Bargest на вашем листинге нету же кода "блокировки" правой кнопки мыши
|
|
#10
|
||||
|
||||
|
Зато там есть остановка цепочки хуков. Я же писал выше: не советую просто копировать код, лучше разберитесь. В моей программе аналогичный код, работает, как часы.
А, ну да. Естественно надо еще сделать проверку, что это именно правая кнопка мыши, и для других кнопок использовать всё тот же CallNextHookEx. Последний раз редактировалось Bargest, 27.12.2011 в 18:51. |
|
#11
|
|||
|
|||
|
Bargest, удалось определить нужное окно при нажатии правой кнопки мыши. Осталось блокировать контекст меню...Поискал, прочитал много стаей, в одном из них написали что достигли это с помощью EndMenu.
Но увы и это мне не помогло. Вот библиотека: PHP код:
Что посоветуете? |
|
#12
|
||||
|
||||
|
Я же не спроста написал выше:
Код:
result:=1; А вот всякие ухищрения вроде попыток убрать меню и пр. бесполезны - хук обрабатывается до того, как сообщение о нажатии кнопки мыши дойдет до окна калькулятора, а значит до того, как это меню отобразится. [лирическое отступление] Вообще убрать уже открывшееся меню может быть крайне трудной задачей - например, ничто не мешает по нажатию правой кнопки мыши просто-напросто нарисовать белый прямоугольник с текстом в нем, и при движении мыши подсвечивать разные строки. И отловить такое "открытие меню" будет почти невозможно, не говоря уже о том, чтобы стереть это "меню" и восстановить предыдущее изображение, да вдобавок отключить обработчики движения мыши над картинкой. Так что лучше сделать так, чтобы сообщение о ПКМ просто не добиралась до интересующего окна.[/лирическое отступление] Последний раз редактировалось Bargest, 28.12.2011 в 17:00. |
|
#13
|
|||
|
|||
|
Bargest, слава Богу, решение найдено, вот отрывок из библиотеки:
PHP код:
Спасибо вам за внимание и за поддержку. |