认知尚浅,如有错误,愿闻其详!
概述
在便签项目中,会涉及到便签页的设置和便签内容的数据本地保存与开机自启设置等。而这些数据内容都需要写到Windows中的注册表里。注册表有什么用?点我
简单的讲,我们就是在注册表中进行读写,对键值对的操作。
引用与类
在C#中,要对注册表进行操作需要引用Microsoft.Win32命名空间,其中本例主要使用的是RegistryKey类和Registry类。
案例代码
首先,我将便签需要写入的相关数据进行Json数据格序列化(使用using Newtonsoft.Json),得到该数据
{
"WinLeft":1243.0,
"WinTop":2.0,
"WinWidth":200.0,
"WinHeigth":250.0,
"Data":"\r\n2、注册表简单使用\r\n3、窗口全透明,及控件也透明解决\r\n4、SQLHelper工具类实现\r\n5、SQL常用语句",
"Theme":3,
"Style":0,
"Opacity":0.7,
"Title":"待做事项",
"Hidden":false,
"Topmost":false,
"CustomTheme":{"Name":"默认","TextColor":"#FFFFFF","BackColor":"#FFAEB9","TopBarColor":"#FFAEB9"},
"CustomStyle":{"Name":"默认","FontFamily":"微软雅黑","FontSize":"13"},
"CreationTime":"0001-01-01T00:00:00"
}
然后创建我自己的注册表目录,并赋值给注册表键对象:
/// <summary>
/// 创建该软件注册表目录,用存储相关数据,并且是注册表键对象
/// </summary>
public static RegistryKey REG_PATH = Registry.CurrentUser.CreateSubKey("Software").CreateSubKey("MMY StickyNote").CreateSubKey("StickyNote");
获取到相应的键后,我们就可以在需要的地方调用SateData方法执行SetValue(名称,值)方法实现对其值得修改。最终完成注册表写入
/// <summary>
/// 将数据写入注册表
/// </summary>
/// <param name="id">便签窗口Id</param>
// <param name="data">此便签相关的数据对象</param>
public static void SetData(string id, ViewSettingData data)
{
string dat = JsonConvert.SerializeObject(data);
REG_PATH.SetValue(id, dat);//写入注册表,写入名称与值。
}
开机自启注册表写入
/// <summary>
/// 开机启动项打开节点赋值
/// </summary>
public static RegistryKey START_KEY = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
/// <summary>
/// 注册表开机自项创建及修改
/// </summary>
public static bool StartWithWindows
{
get
{
object obj = START_KEY.GetValue("MMY StickyNote", null);//获取自启注册表项,
if (obj == null) return false;
return true;
}
set
{
if (value) { START_KEY.SetValue("MMY StickyNote", Assembly.GetExecutingAssembly().Location); }//根据checkBox传入的值来决定。设置自启注册表项,获取可执行文件目录,赋值注册表
else
{
try { START_KEY.DeleteValue("MMY StickyNote", false); }//删除该注册表自启项
catch { }
}
}
}