기존 IE 창에서 이벤트를 캡처하려고합니다. 아래의 코드 샘플에서는 사용자가 요소를 클릭 한 다음 클릭되는 요소에 대한 일부 특성을 다시 가져올 때 브라우저 문서에서 mouseClick
이벤트를 캡처하려고합니다.C#의 IE 이벤트 후킹
public partial class frmBrowserElementBuilder : Form
{
InternetExplorer ie;
public frmBrowserElementBuilder()
{
InitializeComponent();
}
private void frmBrowserElementBuilder_Load(object sender, EventArgs e)
{
//create IE
ie = new InternetExplorer();
ie.Visible = true;
//handle document completed
ie.DocumentComplete += new
DWebBrowserEvents2_DocumentCompleteEventHandler(DocumentComplete);
}
public void DocumentComplete(object pDisp, ref object URL)
{
//document was loaded
//MessageBox.Show("DocumentComplete: " + URL);
//create event handler and hook onclick from IE
DHTMLEventHandler onClickHandler = new DHTMLEventHandler(ie.Document);
onClickHandler.assignedEvent += new DHTMLEvent(this.ie_onClick);
ie.Document.onclick = onClickHandler;
}
private void ie_onClick(mshtml.IHTMLEventObj e)
{
//something was clicked
MessageBox.Show(string.Format("Event Hooked {0}, Qualifier {1}", e.type, e.qualifier));
}
public delegate void DHTMLEvent(IHTMLEventObj e);
[ComVisible(true)]
public class DHTMLEventHandler
{
public DHTMLEvent assignedEvent;
private mshtml.HTMLDocument document;
public DHTMLEventHandler(mshtml.HTMLDocument doc)
{
//assign to instance of IE document
this.document = doc;
}
[DispId(0)]
public void Call()
{
//call the event
assignedEvent([email protected]); //{System.InvalidCastException: "Specified cast is not valid."}
}
}
}
코드는 컴파일하고 예상대로 무효 전화()는, 그러나, this.document.parentwindow
의 값은 null
입니다 트리거 및 System.InvalidCastException: Specified cast is not valid when stepping into the assignedEvent method.
를 throw되어 나는 this.document
검사 할 때, parentWindow
상태
의 값함수를 평가하려면 모든 스레드가 실행되어야합니다.
평가 강제 후 상태 :
가'((mshtml.HTMLDocumentClass) this.document) .parentWindow' 'System.InvalidCastException'형식의 예외가 발생했습니다.
아이디어가 있으십니까?
설명해 주셔서 감사합니다. –