我正在編寫一個項目,我正在編寫一個c#windows應用程序想要從正在運行的Internet Explorer實例獲取光標下的當前元素。將onmouseover事件分配給我的htmldocument不起作用
我可以得到IE的運行實例的IHTMLDocument2的把手,我想給它分配這樣的onmouseover事件:
DHTMLEventHandler myHandler = new DHTMLEventHandler(htmlDocument);
myHandler.Handler += new DHTMLEvent(this.BrowserEventHandler);
htmlDocument.onmouseover = myHandler;
而且因爲我不想讓IE吃其他事件(著名,但解決問題),我應該創建一個DHTMLEventHandler類是這樣的:
public delegate void DHTMLEvent(IHTMLEventObj obj);
[ComVisible(true)]
public class DHTMLEventHandler
{
public DHTMLEvent Handler;
private IHTMLDocument2 Document;
public DHTMLEventHandler(IHTMLDocument2 doc)
{
Document = doc;
}
[DispId(0)]
public void Call()
{
Handler([email protected]);
}
}
而且我BrowserEventHandler的方法是這樣的:
public void BrowserEventHandler(IHTMLEventObj e)
{
}
仍然是空的(但我想要得到的元素innerHtml
下光標),但仍這種方法是空的,我也得到:
「」類型的第一次機會異常出現在FindText.exe
每當我移動鼠標。
問題:
- 爲什麼我得到這個例外?
- 是否有可能在變量中使用e.srcElement.innerhtml並在我的c#應用程序中使用?
讓我知道是否有什麼不清楚和含糊不清。提前感謝任何幫助和想法。我大大感謝任何意見和幫助。
更新:
回答我的第二個問題,似乎有可能得到IHTMLEventObj e
的e.srcElement.innerHTML
但我真的不知道爲什麼BrowserEventHandler
方法不會被調用。任何想法或提示?
UPDATE2:
好吧,我發現這個問題。首先,我改變了我的項目的一些設置,以獲得異常第一次發生的線(因爲這是第一次機會例外),如下所示:
在visual studio中:Menu >> Debug >> Exceptions >> CLR exceptions >> system並檢查SystemInvalidCastException的throw選項。
我發現這個問題是這一行DHTMLEventHandler
類:
Handler([email protected]);
它拋出Invalid Cast Exception
我認爲這是根據我最近的搜索與Thread
秒。
我想我應該把ApartmentState設置爲ApartmentState.STA
。但我不知道如何。有任何想法嗎?
謝謝盧克張貼答案。我試圖讓這個在VB.NET中工作,並有各種問題。 Call中使用的線程是一個對VB.NET無用的MTA線程。我驚訝它在C#中的作品。但是,在設置自動化IE的同時,如果由於我的代碼導致事件觸發,其他地方都會鎖定。我也嘗試了你的代碼,並停止了調用線程,但是這是IE的線程,所以什麼都不能做。 – darbid