public static void InjectColor(Color? fgColor, Color? bgColor, Theme theme, Category category, ColorRecord colorRec) { var regPath = Path.Combine(ThemeReader.RegPath, theme.Guid.ToString("B"), category.Name); var reg = Registry.CurrentUser.OpenSubKey(regPath, true); var colorData = reg.GetValue("Data") as byte[]; using (var ms = new MemoryStream(colorData)) using (var bw = new BinaryWriter(ms)) { if (bgColor != null) { ms.Seek(colorRec.BackgroundPos, SeekOrigin.Begin); WriteColor(bgColor.Value, bw); } if (fgColor != null) { ms.Seek(colorRec.ForegroundPos, SeekOrigin.Begin); WriteColor(fgColor.Value, bw); } bw.Flush(); bw.Close(); var setData = ms.ToArray(); reg.SetValue("Data", setData, RegistryValueKind.Binary); } }
private static ColorRecord UnpackColorRecord(BinaryReader reader) { var recordNameLen = reader.ReadInt32(); var nameBytes = reader.ReadBytes(recordNameLen); var colorRecord = new ColorRecord { Name = Encoding.UTF8.GetString(nameBytes), }; colorRecord.BackgroundPos = reader.BaseStream.Position; colorRecord.Background = UnpackColor(reader); colorRecord.ForegroundPos = reader.BaseStream.Position; colorRecord.Foreground = UnpackColor(reader); return colorRecord; }