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; }