我正在使用C#.NET开发一个Windows应用程序。在我的一个winform中,我添加了一个WebBrowser控件。在这个webbrowser控件中,我已经从我的本地网站打开了一个asp页面。现在在这个网页中有一个用于播放swf文件的flash对象。 现在我的问题是我可以从winform访问此控件吗?如果是这样呢?你可以为那个flash对象创建一个处理程序吗?
答案 0 :(得分:2)
您可以通过IHTMLObjectElement :: object方法从元素访问ActiveX的脚本编写接口。在microsoft.public.inetsdk.programming.webbrowser_ctl新闻组中搜索IShockwaveFlash以获取更多相关信息。
如果您使用的是Windows窗体,则会通过HtmlElement.DomElement公开html元素的界面。您可以添加对microsoft.mshtml的引用并将DomElement转换为IHTMLObjectElement,然后获取其对象属性并强制转换为IShockwaveFlash。
在ATL中代码看起来像这样
#import "flash.dll" raw_interfaces_only
CComPtr<IDispatch> htmlElement;
CComPtr<IDispatch> activeXObject;
hr = GetElement(elementIdString, &htmlElement);
if (htmlElement!= NULL)
{
CComQIPtr<IHTMLObjectElement> htmlObjectElement(htmlElement);
if (htmlObjectElement!= NULL)
{
htmlObjectElement->get_object(&activeXObject);
CComQIPtr<ShockwaveFlashObjects::IShockwaveFlash, &IID_IUnknown> flashViewer(spdispActiveXObject);
if(flashViewer!=NULL)
{
//do something on the flash
CComBSTR movie;
flashViewer->get_Movie(&movie);
}
}
}