WPF MEF插件工具箱功能--开机自启

工具箱主程序里面可能会加载好多小工具程序,那这些小工具想要设置开机自启怎么办呢...

d29b919c5415a6aad73929b57802d8f5.png

在列表页设计 ,每一个工具都有一个设置开机启动的选择框,选中后,表示要自启. 

(这个框还要根据Iplugin接口中SupportAutoStartup字段决定是否显示)

开始写代码:

首先,要保存配置,就要有配置文件,我选择了直接将类序列化的方式,简单快捷...

Config类:

public class ToolsConfig
    {
        public ToolsConfig()
        {


        }
        //存的是要自启的插件的guid d IPlugin接口中获得
        public List<string> AutoStartupPlugins { get; set; } = new List<string>();
    }

配置类中存的是要开机自启的插件的Guid,在IPlugin类中有定义

Guid PluginKey { get; }

当点击了某个插件的自启选择框后,事件为:

private void rbAutoStartup_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            IsAutoStartup = !IsAutoStartup;
            //获取IPlugin 接口对象
            var plugin = this.DataContext as Plugin.Base.IPlugin;
            //修改配置对象,和注册表
            bool result = Global.SetStartup(plugin.PluginKey.ToString(), IsAutoStartup);
            //保存配置到本地
            bool saved = Global.SaveConfig();
            if (!result || !saved)
            {
                IsAutoStartup = !IsAutoStartup;
                MessageBox.Show("设置开机自动启动失败");
            }
        }

Global.SetStartup代码为:

public static bool SetStartup(string key,bool value)
        {
        //添加或删除guid值
            if (value)
            {
                if (!ToolsConfig.AutoStartupPlugins.Contains(key))
                    ToolsConfig.AutoStartupPlugins.Add(key);
            }
            else
            {
                if (ToolsConfig.AutoStartupPlugins.Contains(key))
                    ToolsConfig.AutoStartupPlugins.Remove(key);
            }
            //如果一个要自启的插件都没有,就把开机启动注册表项删掉,否则加上
            if (ToolsConfig.AutoStartupPlugins.Count>0)
            {
            //判断注册表中是否已经设置了自启
                if (Utils.IsAutoRun())
                {
                    return true;
                }
                else
                {
                //更新注册表
                    Utils.SetStartup();
                    return Utils.IsAutoRun();
                }
            }
            else
            {
            //更新注册表
                Utils.CancelStartup();
                return true;
            }
        }

这样主程序自动启动后,看看配置里面有没有guid,有的话,就启动它

主程序加载插件代码:

private void Load()
        {
        //获取配置
            var config = Global.LoadConfig();
            Global.ToolsConfig = config;
            var pluginLoader = new PluginLoader();
            //加载dll
            pluginLoader.Load();
            
            if (mWindow is MainWindow m)
            {
                var grid = m.UniGrid;
                foreach (var plugin in Global.Plugins)
                {
                    m.Dispatcher.Invoke(new Action(() =>
                    {
                        PluginItem item = new PluginItem
                        {
                            DataContext = plugin,
                            //决定是否要自动启动
                            IsAutoStartup = config != null && config.AutoStartupPlugins.Contains(plugin.PluginKey.ToString()),
                            SupportAutoStartup = plugin.SupportAutoStartup
                        };
                        //添加到插件列表上
                        grid.Children.Add(item);
                        //重点:如果插件有自动启动标志,则调用插件 Startup方法
                        if (item.IsAutoStartup)
                        {
                            plugin.Startup(Global.ConfigBasePath);
                        }
                    }));
                }
            }
        }

此时,主程序启动后,勾选了自启的插件也启动了.就实现了所有插件的自启.

修改注册表的代码百度一下到处都是,就不贴上来了,想看的可以百度一下.

写完后看看,感觉挺乱的....

我水平有限,这瞎几把写的逻辑,勉强能实现功能...

等我整理一下代码,把项目地址供上来,各位再看吧..........

在电脑上看比较明了,手机微信看代码太扯了,都看不全

需加微信交流群的,请加小编微信号zls20210502,切记备注 加群,小编将会第一时间邀请你进群!(目前①群已满 ,需要在②群排队等坑位)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF是一种创建Windows应用程序的框架,它提供了许多可视化组件和工具,使得应用程序的创建变得更加容易和快捷。本次实例的项目是一个简单的点餐系统,它包含了以下几个主要模块: 1. 登录界面 用户需要输入用户名和密码才能成功登录,登录成功后,程序将跳转到订单界面。如果用户输入的用户名或密码不正确,则会提示错误信息。 2. 菜单界面 在菜单界面,用户可以查看所有可供选择的菜品列表,并可以选择需要点的菜品。每个菜品都可以显示它的描述、价格以及图片,用户可以在右侧的“购物车”中查看他们已经点的菜品以及总价。 3. 订单界面 订单界面用于显示用户已经点的菜品信息以及订单的总价。用户在确认购物车中的菜品信息无误后,可以点击“去结算”按钮,进入支付界面。 4. 支付界面 在支付界面,用户需要选择支付方式并输入对应的支付信息,如信用卡号、有效期和验证码等。支付成功后,程序将返回订单界面并提示用户支付成功。 通过使用WPF的鲁棒性、可扩展性和易用性,开发者可以在编写这样的小项目时得到很大的好处。开发者可以使用大量的分层和组件化方法,使他们的代码变得易于管理和扩展。此外,通过使用WPF的数据绑定和样式,开发者可以使程序的UI更加一致和响应式。总的来说,使用WPF编写点餐系统可以使开发者轻松地创建一个功能齐全、易于使用并具有良好用户体验的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值