Не удается добавить «C: \ Windows \ System32 \ shdocvw.dll» в мой проект - PullRequest
8 голосов
/ 30 июня 2011

Я использую VS 2010 Ultimate.

Я пытаюсь добавить "shdocvw.dll" к ссылкам моего проекта, щелкнув правой кнопкой мыши Ссылки -> Добавить ссылку ... , затем нажав Обзор и перейдя к "C : \ Windows \ System32 \ shdocvw.dll ", но когда я нажимаю кнопку Добавить , ничего не происходит. Диалог даже не закрывается.

Есть идеи, что я могу делать не так?

Я пытался перезапустить VS, но у меня продолжала возникать эта проблема.

Ответы [ 3 ]

17 голосов
/ 17 декабря 2011

В вашем решении C #, если вы добавите ссылку на компонент COM с именем «Microsoft Internet Controls», вы сможете получить доступ к пространству имен SHDocVw из консольного приложения C #, не делая ничего необычного.

Как только я это сделал (в 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 вместо этого можно использовать подход, описанный ниже, чтобы обойти ошибку «Невозможно внедрить тип взаимодействия« 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 см. В следующем ответе:

C # Как получить текущий URL из IE?

2 голосов
/ 30 июня 2011

Проблема в том, что shdocvw.dll - это не сборка .NET, а обычная библиотека Win32 DLL и элемент управления ActiveX, но не сборка. Единственные вещи, которые вы можете добавить в качестве ссылок на проект C #, - это сборки .NET.

ОК, поэтому возникает вопрос: почему вы хотите добавить ссылку на shdocvw.dll в проект C #? Возможно, потому что вы хотите использовать интерфейс ActiveX для Internet Explorer, чтобы включить веб-браузер в ваше приложение.

Если это так, то если вы пишете приложение Windows Forms, вам следует использовать элемент управления WinForms WebBrowser, а если вы пишете приложение WPF, вы должны использовать элемент управления WPF WebBrowser. Вот инструкции для Windows Forms:

Но если по какой-то причине вы хотите включить элемент управления самостоятельно, вместо использования «консервированной» версии, вам необходимо добавить его в Visual Studio Toolbox, как описано здесь:

1 голос
/ 30 июня 2011

Это, к сожалению, распространенный запрос, который я видел раньше.

Вы не можете добавить его в качестве ссылки.Вам нужно добавить его как элемент панели инструментов, поместить в форму, а затем Боб - ваш дядя ...

Это особенность!

Полная инструкция здесь: http://www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...