各位好,我在研究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)呢?
[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();
}
[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();
}
解决方案 »
- 如何设置DNS自动获取,使用VC方式。高分求助。
- 菜鸟学开发视频播放器
- ftp文件修改时间的问题
- 把CString 变成 UINT32
- 我有CPropertyPage,CPropertySheet做成的属性表,如何将属性表放在FormView中。再做不出来我就要被炒了,谢谢大哥们了
- 老鸟们:API速查的书籍很多,哪位老鸟推荐一本相对来讲比较好的.
- 汇编题,大家帮忙做一下,感激不仅!(急)
- VC中如何实现.net属性页那种风格的控件??
- 怎样在asp中用fso批量删除文件(用复选框方式)?谢谢!
- 有没有简单的办法使客户调用com组件时可以不用输入某些接口参数?
- 有一起自学网络编程的同道?
- SendDlgItemMessage搭配char出乱码~
IDispatch::QueryInterface ==> IEditCtrl
IDispatch::QueryInterface ==> IEditCtrl