怎么获取并操作HtmlDocument里面的ActiveX控件
如何获取并操作HtmlDocument里面的ActiveX控件
各位好,我在研究IE插件,现在已经实现获取IE运行时IHTMLDocument2对象,并且通过getElementById得到页面上的控件。问题是如何将得到的一个IHTMLObjectElement转换成ActiveX对象并且调用里面的某些方法?
例如,支付宝网站https://www.alipay.com/user/login.htm里面有一个<object id="_fmu.l._0.p_ie" classid="clsid:488A4255-3236-44B3-8F27-FA1AECAA8844" .../>的密码输入控件,在运行时应该是一个存在于%windir%\System32\aliedit\aliedit.dll的ActiveX控件。
通过反射,我可以查看到该控件实现如下方法,那么有什么办法可以在IE运行时,通过IE插件获取IHTMLObjectElement对象,然后转换成EditCtrlClass对象,最后调用里面某一方法(如dispId=3, TextValue)呢?
------解决方案--------------------
IHTMLObjectElement::get_object ==> IDispatch
IDispatch::QueryInterface ==> IEditCtrl
各位好,我在研究IE插件,现在已经实现获取IE运行时IHTMLDocument2对象,并且通过getElementById得到页面上的控件。问题是如何将得到的一个IHTMLObjectElement转换成ActiveX对象并且调用里面的某些方法?
例如,支付宝网站https://www.alipay.com/user/login.htm里面有一个<object id="_fmu.l._0.p_ie" classid="clsid:488A4255-3236-44B3-8F27-FA1AECAA8844" .../>的密码输入控件,在运行时应该是一个存在于%windir%\System32\aliedit\aliedit.dll的ActiveX控件。
通过反射,我可以查看到该控件实现如下方法,那么有什么办法可以在IE运行时,通过IE插件获取IHTMLObjectElement对象,然后转换成EditCtrlClass对象,最后调用里面某一方法(如dispId=3, TextValue)呢?
- C# code
[TypeLibType(2)] [Guid("488A4255-3236-44B3-8F27-FA1AECAA8844")] [ClassInterface(0)] public class EditCtrlClass : IEditCtrl, EditCtrl { public EditCtrlClass(); [DispId(20)] public virtual string cm5pk { get; set; } [DispId(19)] public virtual string cm5ts { get; set; } [DispId(11)] public virtual ushort CryptoMode { get; set; } [DispId(13)] public virtual string Identity { get; } [DispId(12)] public virtual uint Intension { get; } [DispId(5)] public virtual bool LogMode { get; set; } [DispId(9)] public virtual string MACAddress { get; } [DispId(4)] public virtual uint MaxLength { get; set; } [DispId(1)] public virtual bool PasswordMode { get; set; } [DispId(15)] public virtual string PInfo { get; } [DispId(8)] public virtual bool Readonly { get; set; } [DispId(2)] public virtual bool SecurityMode { get; set; } [DispId(6)] public virtual string TextData { get; set; } [DispId(3)] public virtual string TextValue { get; set; } [DispId(14)] public virtual bool UseP { get; } [DispId(21)] public virtual string alieditVersion(); [DispId(16)] public virtual string ci1(); [DispId(17)] public virtual string ci2(); [DispId(18)] public virtual string ci3(); [DispId(10)] public virtual string Crypto(bool bEncrypt, uint nIndex, string pInput); [DispId(7)] public virtual bool EchoTest(); }
------解决方案--------------------
IHTMLObjectElement::get_object ==> IDispatch
IDispatch::QueryInterface ==> IEditCtrl