C# 如何从IE中获取当前URL?

7

我希望能够从IE (.NET 4)获取当前的URL。为此,我添加了对Microsoft Interner Controls的引用,并添加了代码(来自http://omegacoder.com/?p=63)。

foreach (InternetExplorer ie in new ShellWindowsClass())
{
   textBox1.Text = ie.LocationURL.ToString();
}

但是我遇到了2个错误:

1] The type 'SHDocVw.ShellWindowsClass' has no constructors defined

2] Interop type 'SHDocVw.ShellWindowsClass' cannot be embedded.
   Use the applicable interface instead.

如何解决这个问题?

如果您正在使用此控件 http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx,您可以从URL属性中获取它。 - jcolebrand
不,我的应用程序将从IE获取URL,这是另一个进程。 - Tony
@tony ~ 等等,什么意思?你能在问题中添加一些解释吗? - jcolebrand
我运行IE和我的应用程序。然后,在我的应用程序中,如果我点击某个按钮,我将看到来自IE的当前URL。 - Tony
所以让我来澄清一下,用户启动IE,然后启动您的程序,您想获取IE当前加载选项卡的URL地址栏中的值,以在您的程序中使用? - jcolebrand
是的,在IE中可以运行许多选项卡,并且我需要获取当前选项卡的URL。 - Tony
1个回答

17
第二个错误导致了第一个错误。打开项目的引用节点,选择 SHDocVw。在属性窗口中,将“Embed Interop Types”更改为 false。你将需要部署 Interop.SHDocVw.dll 程序集,该程序集将与你的程序一起在生成输出目录中找到。
编辑:在研究此错误后,我发现了更好的解决方法。问题在于只有 COM 接口类型可以被嵌入,而不是类。因此避免在代码中使用合成的 XxxxClass 包装器。请改为使用以下方式:
        foreach (InternetExplorer ie in new ShellWindows()) {
            //...
        }

看起来很奇怪,在C#语言中通常无法对接口类型使用new操作符。但是实际上对于COM接口是支持的。


1
它有效了,谢谢!:) 但是,我看到所有选项卡的URL,但如何从当前选项卡获取URL? - Tony
找出哪个选项卡被选中了 :) - Richard J. Ross III
我遇到了一个错误:错误1:找不到类型或命名空间名称“ShellWindowsClass”(您是否缺少使用指令或程序集引用?)c:\users\usrs\documents\visual studio 2012\Projects\CrawlerWeb SLN\CrawlerWeb\frmMain.cs 58 49 CrawlerWeb。我该如何解决它? - Si8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接