gpt4 book ai didi

c# - 将事件处理程序附加到 mshtml.DispHTMLInputElement

转载 作者:行者123 更新时间:2023-11-30 15:11:50 24 4
gpt4 key购买 nike

我正忙于用 C# 编写 BHO(浏览器帮助程序对象),我需要将事件处理程序附加到输入元素上的所有 onclick 事件。我没有使用 visual studio 提供的内置网络浏览器,而是启动安装在客户端 PC 上的 Internet Explorer 的新实例。使用不同版本的 IE 时会出现问题。

在 IE7 和 IE8 中我可以这样做:

public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
HTMLInputElementClass inputElement = el as HTMLInputElementClass;
if (inputElement.IHTMLInputElement_type != "text" && InputElement.IHTMLInputElement_type != "password")
{
inputElement.HTMLButtonElementEvents_Event_onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
}
}
}
}

这很完美,问题是,IE6 在转换到 HTMLInputElementClass 时会抛出一个错误,所以你不得不转换到 DispHTMLInputElement:

public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
DispHTMLInputElement inputElement = el as DispHTMLInputElement;
if (inputElement.type != "text" && inputElement.type != "password")
{
//attach onclick event handler here
}
}
}
}

问题是,我似乎找不到将事件附加到 DispHTMLInputElement 对象的方法。有什么想法吗?

最佳答案

事实证明,一旦您从 System_ComObject 转换为 DispHTMLInputElement 对象,您就可以与 mshtml.[events] 界面进行交互。因此,为 IE6 添加事件处理程序的代码将是:

public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
DispHTMLInputElement inputElement = el as DispHTMLInputElement;
if (inputElement.type != "text" && inputElement.type != "password")
{
HTMLButtonElementEvents_Event htmlButtonEvent = inputElement as HTMLButtonElementEvents_Event;
htmlButtonEvent.onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
}
}
}
}

但是您可以直接连接到事件处理程序,但我想排除某些类型,例如密码和文本字段,因此我必须先转换为 DispHTMLInputElement

关于c# - 将事件处理程序附加到 mshtml.DispHTMLInputElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1881467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com