我使用的是VS 2010 Ultimate。
我正在尝试通过右键单击 References - >将“shdocvw.dll”添加到我的项目引用中。添加引用... ,然后单击浏览并导航到“C:\ Windows \ System32 \ shdocvw.dll”,但是当我单击添加按钮时一切都没有发生。该对话框甚至没有关闭。
知道我能做错什么吗?
我尝试重启VS但仍然遇到这个问题。
答案 0 :(得分:17)
在C#解决方案中,如果添加对名为“Microsoft Internet Controls”的COM组件的引用,您应该能够从C#控制台应用程序访问SHDocVw名称空间,而不必做任何异常。
一旦我这样做(在VS 2008中),我就可以使用SHDocVw.ShellWindows,SHDocVw.IWebBrowser2等等。例如:
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
if (ie.LocationURL.Contains("foo.com"))
ie.Quit();
}
编辑:当使用VS 2012 / .NET 4.x时,您可以使用下面的方法来解决错误“无法嵌入Interop类型'SHDocVw.ShellWindowsClass'。”
using SHDocVw;
// ... snip ...
SHDocVw.ShellWindows shellWindows = new ShellWindows();
foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
if (ie.LocationURL.Contains("foo.com"))
ie.Quit();
有关VS 2012问题的更多信息,请参阅以下答案:
答案 1 :(得分:2)
问题是shdocvw.dll
不是.NET程序集,它既是普通的Win32 DLL又是ActiveX控件,而不是程序集。您可以添加的唯一内容是作为C#项目的引用,是.NET程序集。
好的,这就引起了一个问题,你为什么要在{C}项目中添加对shdocvw.dll
的引用?可能是因为您希望使用Internet Explorer的ActiveX接口在您的应用程序中包含Web浏览器。
如果是,那么,如果您正在编写Windows窗体应用程序,则应使用WinForms WebBrowser
控件,如果您正在编写WPF应用程序,则应使用WPF WebBrowser
控件。以下是Windows窗体的说明:
但是如果由于某种原因你想自己包含控件,而不是使用“canned”版本,那么你需要将它添加到Visual Studio Toolbox中,如下所述:
答案 2 :(得分:1)
这是我之前见过的一个不幸的常见请求。
您无法将其添加为参考。您需要将其添加为工具箱项目,将其放入表单中,然后将其作为您的叔叔......
这是一种特殊性!
此处有完整说明:http://www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx