Internet Explorerの実行中のインスタンスからカーソルの下にある現在の要素を取得したいac# windowsアプリケーションを作成しているプロジェクトに取り組んでいます。
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(Document.parentWindow.@event);
}
}
そして、私のBrowserEventHandlerメソッドは次のようになります。
public void BrowserEventHandler(IHTMLEventObj e)
{
}
まだ空です(ただし、要素の下カーソルを取得したいのですがinnerHtml
)、それでもこのメソッドは空であり、次のようになります。
FindText.exeでタイプ「System.InvalidCastException」の最初のチャンスの例外が発生しました
マウスを動かすたびに。
質問:
- なぜこの例外が発生するのですか?
- 変数でe.srcElement.innerhtmlを取得し、C#アプリケーションで使用することは可能ですか?
不明確で曖昧なことがあれば教えてください。ヘルプやアイデアを事前に感謝します。私はコメントと助けに大いに感謝します。
アップデート:
私の2番目の質問に答えるために、を取得することは可能のようですがe.srcElement.innerHTML
、メソッドが呼び出されないIHTMLEventObj e
理由は本当にわかりません。BrowserEventHandler
アイデアやヒントはありますか?
update2:
わかりました、問題が見つかりました。最初に、プロジェクトのいくつかの設定を変更して、例外が最初に発生する行を取得しました(これは最初のチャンスの例外であるため)。
Visual Studioの場合:メニュー>>デバッグ>>例外>> CLR例外>>システムを選択し、SystemInvalidCastExceptionのスローオプションを確認します。
問題はこのDHTMLEventHandler
クラスの行にあることがわかりました。
Handler(Document.parentWindow.@event);
最近の検索によると、sにInvalid Cast Exception
関連していると思うスローです。Thread
ApartmentStateをに設定する必要があると思いApartmentState.STA
ます。しかし、私は方法がわかりません。何か案は?