![]()  | 
	
 
  | 
| 
		 
			 
			#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 код: 
	
		
	Спасибо вам за внимание и за поддержку.  |