工具箱主程序里面可能会加载好多小工具程序,那这些小工具想要设置开机自启怎么办呢...
在列表页设计 ,每一个工具都有一个设置开机启动的选择框,选中后,表示要自启.
(这个框还要根据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,切记备注 加群,小编将会第一时间邀请你进群!(目前①群已满 ,需要在②群排队等坑位)