Размещение Windows Shell Explorer в моем приложении WPF

Можно ли встроить вид обозревателя файлов / папок в проводнике Windows в окно WPF или WinForms?

Я в основном хочу разместить браузер файлов / папок как часть моего окна приложения. Я не хочу повторно реализовывать то, что обеспечивает оболочка, особенно расширения оболочки, такие как TortoiseSVN.

1.12.2008 21:49:51
4 ОТВЕТА

Насколько я знаю, в Windows Forms и WPF нет встроенного элемента управления обозревателем файлов / папок.
Однако существуют коммерческие сторонние элементы управления, которые предлагают интерфейс, похожий на Windows Explorer, для просмотра файлов и папок на диске. Посмотрите на эти продукты от LogicNP:

Кроме того, вы можете разместить элемент управления Windows Forms WebBrowser в WPF и использовать его для просмотра файловой системы, поскольку он интегрирован с оболочкой Windows.
В XAML вы можете сделать что-то вроде этого:

<Window x:Class="Samples.FilesystemBrowser"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    Title="Filesystem Browser">
    <StackPanel>
        <WindowsFormsHost>
            <wf:WebBrowser Url="C:\" />
        </WindowsFormsHost>
    </StackPanel>
</Window>

Обратите внимание, что в .NET 3.5 с пакетом обновления 1 (SP1) Microsoft добавила собственный элемент управления WPF WebBrowser , так что вы можете дополнительно использовать его вместо:

<Window x:Class="Samples.FilesystemBrowser"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Filesystem Browser">
    <StackPanel>
        <WebBrowser Source="C:\" />
    </StackPanel>
</Window>
7
2.12.2008 21:19:09
Спасибо, но как я могу узнать, был ли выбран файл или папка?
Ehsan Zargar Ershadi 23.09.2012 09:20:38

Подход в моем ответе не тот, который я бы порекомендовал, так как в основном это огромный взлом Тем не менее, можно «разместить» практически любое приложение Windows внутри другого. Предостережения:

  • Это большой жирный взломать
  • Я не совсем уверен, насколько хорошо он играет с различными функциями безопасности, например, в Vista
  • Вы будете все время работать с низкоуровневыми и иногда недокументированными API и делать то, что не так, как ожидали первоначальные дизайнеры.
  • Я недостаточно хорошо знаю различные API, чтобы точно сказать вам, что делать, так что это очень грубый набросок ...

Основной подход заключается в следующем:

  1. Запустите новый процесс explorer.exe
  2. Получите его HWnd
  3. Используя вызовы p / invoke в различные API-интерфейсы Windows (в основном это shell32.dll), переопределите его в своем собственном NativeWindow или UserControl.
  4. Затем вы можете заменить его обработчик сообщений WndProc своим собственным, разделив его на подклассы, чтобы внедрить свое собственное поведение, специфичное для приложения. ( Пример C ++ ; WRT на стеке с вопросом о вызове старого / по умолчанию WndProc; поиск в Google будет давать много ответов. Я делал это раньше в C # и (ick) VBA). Это позволит вам заменить различные варианты поведения пользовательского интерфейса на свой, albiet в очень низкий уровень. (Это зависит от того, как именно реализован проводник: вещи более высокого уровня, такие как щелчки меню, могут получить свое собственное сообщение и, следовательно, их легче обрабатывать; но в других аспектах поведения проводника вы можете получить только необработанные сообщения мыши.)

Вы будете хотеть Spy ++ , чтобы выяснить, какие сообщения происходят когда.

Да, это отличный способ создать множество очень уродливого и хрупкого кода, но иногда это (а) единственный способ заставить все работать правильно; и (б) отлично подходит для изучения того, что происходит под капотом Windows.Forms / MFC / и т. д.

1
23.05.2017 12:34:48

Я написал библиотеку с открытым исходным кодом для встраивания Windows Explorer в приложения .NET. Вы можете взглянуть на http://gong-shell.sourceforge.net/

Он предоставляет элементы управления WinForms, а также предоставляет языковой интерфейс .NET для оболочки Windows. Он лицензирован по лицензии GPL, поэтому его использование в аналогично лицензированном приложении бесплатное, однако, если вы хотите использовать его в коммерческом приложении, напишите мне письмо, и я уверен, что мы сможем что-нибудь с этим решить!

2
3.12.2008 13:03:49
Кстати, пожалуйста, дайте мне знать, как вы справляетесь с этим, у меня пока очень мало отзывов, было бы интересно узнать, работает ли он для вас или какие-либо проблемы у вас возникли.
Grokys 5.12.2008 13:10:23

Оболочка Windows Vista представила новый элемент управления, который реализует интерфейс IExplorerBrowser; это рекомендуемый метод размещения представления файловой системы Windows Shell в вашем приложении. Разработчики, создающие приложения с использованием .NET, могут использовать упакованную версию элемента управления ExplorerBrowser, доступную в Windows API CodePack для .NET.

Обратите внимание, что этот интерфейс доступен только в Windows Vista и более поздних версиях. Если ваше приложение должно работать в более ранних версиях Windows, вам нужно будет вернуться к старой реализации WebOC на этих платформах.

http://msdn.microsoft.com/en-us/library/bb761909(VS.85).aspx http://code.msdn.microsoft.com/WindowsAPICodePack

Это рекомендуется для размещения элемента управления веб-браузера из-за проблемы Win7, описанной здесь: http://blogs.msdn.com/ieinternals/archive/2009/12/30/Windows-7-Web-Browser-Control-will-not -Перейдите-файл-system.aspx

7
30.12.2009 23:38:04