⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserpluginwrapper.cs

📁 C#界面编程
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using ShellDll;
using System.Reflection;
using System.Windows.Forms;
using System.IO;
using System.Globalization;
using System.Security.Policy;
using System.Drawing;
using System.ComponentModel;

namespace FileBrowser
{
    public class BrowserPluginWrapper : Component
    {
        #region Fields

        private ArrayList columnPlugins;
        private ArrayList viewPlugins;
        private ArrayList contextPlugins;

        #endregion

        public BrowserPluginWrapper()
        {
            columnPlugins = new ArrayList();
            viewPlugins = new ArrayList();
            contextPlugins = new ArrayList();

            LoadPlugins();
        }

        private void LoadPlugins()
        {
            string pluginPath = Application.StartupPath + @"\plugins";

            if (Directory.Exists(pluginPath))
            {
                string[] files = Directory.GetFiles(pluginPath, "*.dll");

                foreach (string file in files)
                {
                    try
                    {
                        Assembly plugin = Assembly.LoadFile(file);

                        Type[] types = plugin.GetTypes();

                        foreach (Type type in types)
                        {
                            try
                            {
                                IBrowserPlugin browserPlugin =
                                    plugin.CreateInstance(type.ToString()) as IBrowserPlugin;

                                if (browserPlugin != null)
                                {
                                    if (browserPlugin is IColumnPlugin)
                                        columnPlugins.Add(browserPlugin);

                                    if (browserPlugin is IViewPlugin)
                                        viewPlugins.Add(browserPlugin);

                                    //if (browserPlugin is IContextPlugin)
                                        //contextPlugins.Add(browserPlugin);
                                }
                            }
                            catch (Exception) { }
                        }
                    }
                    catch (Exception) { }
                }
            }
        }

        #region Properties

        public ArrayList ColumnPlugins { get { return columnPlugins; } }
        public ArrayList ViewPlugins { get { return viewPlugins; } }
        public ArrayList ContextPlugins { get { return contextPlugins; } }

        #endregion
    }

    #region Plugins

    public interface IBrowserPlugin
    {
        string Name { get; }
        string Info { get; }
    }

    public interface IColumnPlugin : IBrowserPlugin
    {
        string[] ColumnNames { get; }
        
        HorizontalAlignment GetAlignment(string columnName);

        string GetFolderInfo(IDirInfoProvider provider, string columnName, ShellItem item);
        string GetFileInfo(IFileInfoProvider provider, string columnName, ShellItem item);
    }

    public interface IViewPlugin : IBrowserPlugin
    {
        string ViewName { get; }
        Control ViewControl { get; }

        void FolderSelected(IDirInfoProvider provider, ShellItem item);
        void FileSelected(IFileInfoProvider provider, ShellItem item);
        void Reset();
    }

    /*public interface IContextPlugin : IBrowserPlugin
    {
        string MenuText { get; }
        Icon MenuIcon { get; }
        string MenuInfo { get; }
        
        string[] Extensions { get; }

        void MenuSelected(IFileInfoProvider2 streamProvider, IDirectoryInfoProvider2 storageProvider, ShellItem[] items);
    }*/

    #region Provider Interfaces

    public interface IDirInfoProvider
    {
        ShellAPI.STATSTG GetDirInfo();
    }

    public interface IFileInfoProvider
    {
        ShellAPI.STATSTG GetFileInfo();
        Stream GetFileStream();
    }

    public interface IDirectoryInfoProvider2 : IDirInfoProvider
    {
        IStorage GetDirInfo(ShellItem item);
    }

    public interface IFileInfoProvider2 : IFileInfoProvider
    {
        IStream GetFileInfo(ShellItem item);
        Stream GetFileStream(ShellItem item);
    }

    #endregion

    #endregion
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -