标签: mshtml

如何在VB.NET中使用MSHTML?

在问题#56107的回答中,Erlend提供了这个示例c#代码:

using mshtml;
...
object[] oPageText = { html };
HTMLDocument doc = new HTMLDocumentClass();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
doc2.write(oPageText);
Run Code Online (Sandbox Code Playgroud)

我想在VB.NET中使用mshtml,但IDE无法识别:

Imports mshtml
Run Code Online (Sandbox Code Playgroud)

在VB.NET中使用MSHTML需要采取哪些额外步骤?

vb.net mshtml

5
推荐指数
1
解决办法
3万
查看次数

MSHTML教程

我想学习一些关于MSHTML的基础知识,比如如何使用IHtmlDocument和IHtmlDocument2接口.我搜索了很长一段时间,但找不到初学者的教程.有人可以推荐一些东西吗?

编辑:我更喜欢使用C#.

mshtml ihtmldocument ihtmldocument2

5
推荐指数
1
解决办法
7867
查看次数

如何在IE9中使用MSHTML的addEventListener添加事件监听器?

MSDN文档addEventListener说它接受一个IDispatch *对象形式的回调函数.从C#(我正在使用COM互操作),Visual Studio将参数类型显示为just object.

我找了一个IEventListener类似的接口或类似但没有找到一个.我应该传递什么?

c# mshtml iwebbrowser2 addeventlistener internet-explorer-9

5
推荐指数
1
解决办法
2990
查看次数

5
推荐指数
1
解决办法
1953
查看次数

调试SHDocVw.InternetExplorer.Quit没有关闭iexplore.exe进程

我认为没有明确的答案,所以你如何处理调试这个问题?:

我的主要应用程序(MicroStation插件)使用SHDocVw.InternetExplorer COM包装器启动IE,与其交互,在未使用时隐藏它(例如,当用户关闭窗口并将InternetExplorer.Visible设置为false时拦截).

当主应用程序关闭时,插件通过调用InternetExplorer.Quit来关闭IE,但是iexplore进程仍在运行(在主应用程序关闭时IE被隐藏).

我尝试过的:

  • 调用Quit后调用InternetExplorer对象上的System.Runtime.InteropServices.Marshal.FinalReleaseComObject
  • 在Quit和FinalReleaseComObject之后将对InternetExplorer对象的引用设置为null
  • 在主应用程序退出之前,确保父管理对象获得GC'd(检查是否已调用Finalize)
  • 创建一个测试控制台应用程序并尝试在那里重现问题.例如,当IE处于隐藏状态时尝试调用Quit.(我无法重现问题,IE会在应用程序退出后立即关闭)

有趣的是,我无法重现在同一主应用程序(MicroStation插件)中调用Quit的问题,但主应用程序正在运行时,而不是在退出事件处理代码中.当在其他地方调用时,Quit按预期关闭IE.

否则,InternetExplorer对象对我来说是不透明的.

还有其他方法可以调试此问题吗?

编辑:可能值得注意的是,主应用程序创建UserControl并使IE窗口成为此UserControl的子窗口(使用SetWindowLong更改GWL_STYLE以允许窗口为子窗口,使用SetParent将UserControl设置为父窗口).但是当IE被隐藏时(就在Quit尝试失败时),父窗口被设置为0.

谢谢!

debugging mshtml quit

5
推荐指数
0
解决办法
1251
查看次数

如何获得由几个IHTMLElements组成的IHTMLElementCollection obj?

伙计们:我在object-pascal编程中遇到了"如何获得由几个IHTMLElements组成的IHTMLElementCollection obj"的问题,我的代码如下:

function TExDomUtils.GetElementsByClassName(vDoc:IHTMLDocument3; strClassName:string):IHTMLElementCollection;
var
  vElementsAll : IHTMLElementCollection;
  vElementsRet : IHTMLElementCollection;
  vElement : IHTMLElement;
  docTmp : IHTMLDocument2;
  I ,J: Integer;
begin
  J := 0;
  vElementsAll := vDoc.getElementsByTagName('*');
  for I:=0 to vElementsAll.length - 1 do
  begin
    vElement := vElementsAll.item(I,0) as IHTMLElement;
    if vElement.getAttribute('class',0) = strClassName then
    begin
      // how to get an IHTMLElementCollection obj which composed of several IHTMLElements?
      J := J + 1;
    end;

  end;

  Result := vElementsRet;
end;
Run Code Online (Sandbox Code Playgroud)

delphi pascal mshtml ihtmldocument2

5
推荐指数
1
解决办法
5504
查看次数

ExecCommand CreateLink和IMG

我在设计模式下使用webbrowser-control(MSHTML Edit).当我尝试为所选文本插入超链接时,它可以正常工作.但是当我尝试为所选图片插入超链接时,我收到了错误:

Error 100
Function expected
Run Code Online (Sandbox Code Playgroud)

码:

var
 pCmd : OleVariant;
begin
 html_doc.execCommand('CreateLink', True, pCmd);
end;
Run Code Online (Sandbox Code Playgroud)

如何以另一种方式在图片中插入超链接,与使用execCommand不同?

delphi mshtml hyperlink webbrowser-control execcommand

5
推荐指数
0
解决办法
500
查看次数

如何将System.Windows.Control WebBrowser.Document强制转换为mshtml.MSHTMLDocumentClass?

WebBrowser在WPF窗口中加载了一个.我需要获取加载的网页标题WebBrowser.

我使用了文档

object doc = this._browser.Document;我可以看到它是一个mshtml.MSHTMLDocument,我想把它作为这种类型,以便我可以拉出标题,但我在任何.NET库中都找不到这种类型.

我是否必须自己创建该类型,或者我只是在错误的地方寻找/接近这种错误的方式?

如何从System.Windows.Controls.WebBrowser文档中提取页面标题?

.net html c# wpf mshtml

5
推荐指数
1
解决办法
7684
查看次数

mshtml.HTMLTableCell具有不正确的innerText值

当我尝试解析HTMLTableCellinnerText值是不正确的,似乎我得到的是类名而不是文本.

现在奇怪的是,当我在调试中查看单元格(在VS2010中)时,我看到正确的值我做错了什么?

进一步的研究提出了这个问题,当我查看VS2010中的值时,看起来这个 cell.innerText"中心时间"((mshtml.HTMLTableCellClass)(单元格)).innerText"23:45".问题是,当我转换为mshtml.HTMLTableCellClass时它不会编译,所以我必须使用接口(为什么会这样?)

见下面的代码:

mshtml.HTMLDocument doc = MainBrowser.Document as mshtml.HTMLDocument;

if (doc != null)
{

    mshtml.HTMLTable table = doc.getElementById("ecEventsTable") as mshtml.HTMLTable;

    List<List<string>> textRows = new List<List<string>>();

    foreach (mshtml.HTMLTableRow row in table.rows)
    {
        if (row != null && row.id != null && row.id.Contains("eventRowId"))
        {
            List<string> temp = new List<string>();

            foreach (mshtml.HTMLTableCell cell in row.cells)
            {
                string text = cell.innerText;
                if (text != null && text != "" && text …
Run Code Online (Sandbox Code Playgroud)

html c# mshtml innertext

5
推荐指数
1
解决办法
2458
查看次数

如何在 TWebBrowser IDispatchEvent 中获取自定义事件参数

我试图在 Javascript 和我的TWebBrowser. 在我的第一次迭代中,我能够注册属性更改事件,以便当标记更改时,Delphi 会获取更改,然后读取触发更改的标记的值。这样我们就可以让 Javascript 设置一个隐藏标签,Delphi 将接收更改,然后 Delphi 将读取隐藏标签以获取值。这工作正常,但感觉有点hacky。

在第二次迭代中,我尝试触发 Javascript 中引发的自定义事件。我能够使其正常工作,但我找不到一种方法来获取传递给自定义事件的参数。这是我创建的代码IDispatch

constructor TWebBrowserEvent.Create(const OnEvent: TCallback);
begin
   inherited Create;
   FOnEvent := OnEvent;
end;

function TWebBrowserEvent.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
   Result := E_NOTIMPL;
end;

function TWebBrowserEvent.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
   Result := E_NOTIMPL;
end;

function TWebBrowserEvent.GetTypeInfoCount(out Count: Integer): HResult;
begin
   Result := E_NOTIMPL;
end;

function TWebBrowserEvent.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, …
Run Code Online (Sandbox Code Playgroud)

delphi mshtml delphi-2010 twebbrowser

4
推荐指数
1
解决办法
941
查看次数