Запрет правого клика в TCppWebBrowser

Статус: Offline
Реєстрація: 11.06.2009
Повідом.: 424
Запрет правого клика в TCppWebBrowser

Здравствуйте, вот столкнулся с проблемой Нужно запретить показ контекстного меню в TCppWebBrowser.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
пример не помог, его не удалось скомпилировать ни в 6ом, ни в 2009ом билдере (вернее в 6ом кое как вышло но менюшка все равно показалась, да и мне надо в 2009ом). Подскажите пожалуйста актуальное решение:rolleyes:
 
С помощью хука WH_MOUSE можно
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.
 
Хук - это извращение.

таки тебе надо умудриться скомпилить тот код с использованием IDocHostUIHandler
- это самый правильный путь.
 
Хук - это извращение.

таки тебе надо умудриться скомпилить тот код с использованием IDocHostUIHandler
- это самый правильный путь.

знаю, но компилятор находит кучу ошибок, их разгрести почти нереально, на место одной приходит 10:(

С помощью хука WH_MOUSE можно
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.

тотальный хук мне не нужен, а как проверять над чем сейчас мышь я не умею, да и делаю все на С++
 
Хук - это извращение.

таки тебе надо умудриться скомпилить тот код с использованием IDocHostUIHandler
- это самый правильный путь.
Хмм. А почему бы не начать плясать от печки, то есть от IWebBrowser2 ? Там в дереве интерфейсов есть IHTMLDocument2, через который можно спионерить событие mousedown со всеми вытекающими отсюда последствиями. ИМХО это попроще.
Еще как совсем убогий вариант можно внедрить в любой загруженный документ жабаскрипт (тупо дописать в конец), который заблочит правую мышу.
 
Хмм. А почему бы не начать плясать от печки, то есть от IWebBrowser2 ? Там в дереве интерфейсов есть IHTMLDocument2, через который можно спионерить событие mousedown со всеми вытекающими отсюда последствиями. ИМХО это попроще.
Еще как совсем убогий вариант можно внедрить в любой загруженный документ жабаскрипт (тупо дописать в конец), который заблочит правую мышу.

второй способ отпадает, так как в этом случае надо вешать какой нить alert(); что не приемлемо, а вот на счет первого способа можно поподробнее?

ооо, в 6ом билдере запахал тот пример с 1го поста, терь надо его как нить в 2009й засунуть, но как???

скомпиллил в 2009ом, но не пашет сцука, менюшка появляется

ща в чистеньком 2009ом откомпилировал, все равно эффекта 0

Работает!!!!!:пиво:
Вот
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
исходник, единственно там небольшая ошибочка, забыли объявить dochandler:клас:
Мне б ещё рамочку убрать, и вообще супер буит
 
Останнє редагування:
Хмм. А почему бы не начать плясать от печки, то есть от IWebBrowser2 ? Там в дереве интерфейсов есть IHTMLDocument2, через который можно спионерить событие mousedown со всеми вытекающими отсюда последствиями. ИМХО это попроще.

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

Работает!!!!!:пиво:
Вот
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
исходник, единственно там небольшая ошибочка, забыли объявить dochandler:клас:
Мне б ещё рамочку убрать, и вообще супер буит

Лентяй. Почитать про GetHostInfo впадлу?
 
Это сложный способ, я боюсь у него ничего не получится. Там надо сначала дождаться когда документ загрузится. Во-вторых это не отрубит никаких кастом меню которые разработчик сайта задумал прицепить на клик правой кнопкой.



Лентяй. Почитать про GetHostInfo впадлу?

есть немного) а чего там?:rolleyes:

Написал вот такую штуку:
Код:
virtual HRESULT STDMETHODCALLTYPE GetHostInfo(
	/* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo) {
	pInfo->dwFlags |= DOCHOSTUIFLAG_NO3DBORDER;
	//pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
	//pInfo->cbSize = sizeof(pInfo);
		return S_OK;
    }
работает, но с второго раза:confused: мне это не очень критично (в первый раз браузер в инвизе и грузит болванку), но почему так?
 
Это сложный способ, я боюсь у него ничего не получится. Там надо сначала дождаться когда документ загрузится. Во-вторых это не отрубит никаких кастом меню которые разработчик сайта задумал прицепить на клик правой кнопкой.
Ну может и сложный - я просто много юзал эту модель еще во времена зеленых деревьев и маленького интернета и мне там просто :)
А насчет кастомменюшек - это каким боком? После того как я спионерю событие - я его ессесно дальше уже не пропущу и разработчик о клике мышкой ничего не узнает ;)
 
Ну может и сложный - я просто много юзал эту модель еще во времена зеленых деревьев и маленького интернета и мне там просто :)
А насчет кастомменюшек - это каким боком? После того как я спионерю событие - я его ессесно дальше уже не пропущу и разработчик о клике мышкой ничего не узнает ;)

А кто сказал что ты первый кто на него подписался? там как бы может быть много подписчиков.
 
А кто сказал что ты первый кто на него подписался? там как бы может быть много подписчиков.
То есть как это "я не первый"? :) Это же МОЙ компонент в МОЕМ приложении ;)
Ну разве что в сторонних БХО кто-то захочет поиграться - кстати тут интересный вопрос, кто первым получит ивент ДокументКомплит - приложение или БХО. Надо будет потестить надосуге.
 
То есть как это "я не первый"? :) Это же МОЙ компонент в МОЕМ приложении ;)
Ну разве что в сторонних БХО кто-то захочет поиграться - кстати тут интересный вопрос, кто первым получит ивент ДокументКомплит - приложение или БХО. Надо будет потестить надосуге.

Я думаю что ты очень удивишься когда не увидишь никакой закономерности :)

Я кстати насчет очередности думал про событие mousedown - на него-то и скрипт внутри страницы может подписаться, и таки получит его несмотря на то что ты возвращаешь в своем обработчике mousedown.
 
Я думаю что ты очень удивишься когда не увидишь никакой закономерности :)
Это врядли - там однозначно один поток, уж я то с БХО в свое время наигрался :) БХО точно получит ивент до окончательного рендеринга страницы, причем для нескольких БХО порядок получения сохраняется - в конечном итоге энум записей о регистрации в реестре возвращает их в одном и том же порядке и смысла браузеру тасовать их нет. И пока БХО не вернет управление из обработчика - браузер висит. А вот что будет первичным - БХО или собсно приложение...
 
Это врядли - там однозначно один поток, уж я то с БХО в свое время наигрался :) БХО точно получит ивент до окончательного рендеринга страницы, причем для нескольких БХО порядок получения сохраняется - в конечном итоге энум записей о регистрации в реестре возвращает их в одном и том же порядке и смысла браузеру тасовать их нет. И пока БХО не вернет управление из обработчика - браузер висит. А вот что будет первичным - БХО или собсно приложение...

Ну если ты уверен что порядок не тасуется - тогда да, есть шанс.

Но как бы там ни было, вариант с "подделкой" хоста - самый верный и надежный.

Хмм. А как насчет установить cancelBubble в Тру?

Если мне не изменяет память, бубл отрубает все последующие ивенты в иерархии, а никак не сам ивент. Или я не прав?
 
Если мне не изменяет память, бубл отрубает все последующие ивенты в иерархии, а никак не сам ивент. Или я не прав?
Та прав - то я ступил, поправил пост - но ты как "самая быстрая мышь на западном побережье" :D
 
1 - А шо у этого класса низзя переопределить эфент правого клика?
2 - В мануалах написано как ставить свою карту сообщений в любой класс, если энто оконный компонент, то пару строчек кода надо лишних.
 
Назад
Зверху Знизу