Сначала приведите WebBrowser.Document.DomDocument
к нужному интерфейсу в пространстве имен mshtml, например mshtml.HTMLDocumentEvents2_Event
, затем вы можете обрабатывать (и отменять) события колесика мыши. Я не уверен, но я думаю, что вам нужно подключать обработчик событий каждый раз, когда документ изменяется, поэтому я делаю это для события WebBrowser.DocumentCompleted
. Я также не уверен, нужно ли вам освобождать какие-либо COM-объекты.
Это было достаточно разочаровывающим, что я заставил его работать и перестал заботиться ...
Вот как минимум один документ, объясняющий основы: Как обрабатывать события документа в приложении Visual C # .NET
Для вашего конкретного случая просто условно сдавить событие onmousewheel
, в зависимости от того, нажата ли клавиша CTRL
.
private void webBrowser_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser.Url.ToString() == "about:blank")
return;
var docEvents = (mshtml.HTMLDocumentEvents2_Event)webBrowser.Document.DomDocument;
docEvents.onmousewheel -= docEvents_onmousewheel; //may not be necessary?
docEvents.onmousewheel += docEvents_onmousewheel;
}
bool docEvents_onmousewheel(mshtml.IHTMLEventObj pEvtObj)
{
if (pEvtObj.ctrlKey)
{
pEvtObj.cancelBubble = true; //not sure what this does really
pEvtObj.returnValue = false; //this cancels the event
return false; //not sure what this does really
}
else
return true; //again not sure what this does
}
Теперь, если вам нужно узнать Дельта Колеса (количество прокрутки), вам нужно привести объект событий к еще одному интерфейсу.
bool docEvents_onmousewheel(mshtml.IHTMLEventObj pEvtObj)
{
var wheelEventObj = (mshtml.IHTMLEventObj4)pEvtObj;
var delta = wheelEventObj.wheelDelta;
[...]
}