public static Settings CreateDefaultSettings() { var result = new Settings {DefaultLayoutName = "ENU"}; var colorizationParams = new DwmApi.WDM_COLORIZATION_PARAMS { Color1 = 3640655872, Color2 = 3640655872, Opaque = 1, Intensity = 100, Unknown1 = 10, Unknown2 = 120, Unknown3 = 50 }; result.DefaultLayoutColorScheme = colorizationParams; colorizationParams = new DwmApi.WDM_COLORIZATION_PARAMS { Color1 = 3640680576, Color2 = 3640680576, Opaque = 1, Intensity = 100, Unknown1 = 10, Unknown2 = 120, Unknown3 = 50 }; result.AlternativeLayoutColorScheme = colorizationParams; return result; }
public static void SetColor(IntPtr layoutHandle, Settings settings) { if (layoutHandle == currentLanguageHanlder) return; currentLanguageHanlder = layoutHandle; string languageName = null; foreach (InputLanguage language in installedInputLanguages) { if (language.Handle == layoutHandle) { languageName = language.Culture.ThreeLetterWindowsLanguageName; break; } } if (languageName == null) return; try { if (!DwmApi.DwmIsCompositionEnabled()) return; var colorizationParams = (languageName == settings.DefaultLayoutName) ? settings.DefaultLayoutColorScheme : settings.AlternativeLayoutColorScheme; DwmApi.DwmSetColorizationParameters(ref colorizationParams, 0); } catch (Exception ex) { MessageBox.Show(ex.ToString()); throw; } }
public static Settings Deserialize(byte[] serializedSettings) { var settings = new Settings(); using (var reader = new BinaryReader(new MemoryStream(serializedSettings))) { var defaultLayoutNameLength = reader.ReadInt32(); var buffer = reader.ReadBytes(defaultLayoutNameLength); settings.DefaultLayoutName = Encoding.UTF8.GetString(buffer); var colorizationParams = new DwmApi.WDM_COLORIZATION_PARAMS { Color1 = reader.ReadUInt32(), Color2 = reader.ReadUInt32(), Opaque = reader.ReadUInt32(), Intensity = reader.ReadUInt32(), Unknown1 = reader.ReadUInt32(), Unknown2 = reader.ReadUInt32(), Unknown3 = reader.ReadUInt32() }; settings.DefaultLayoutColorScheme = colorizationParams; colorizationParams = new DwmApi.WDM_COLORIZATION_PARAMS { Color1 = reader.ReadUInt32(), Color2 = reader.ReadUInt32(), Opaque = reader.ReadUInt32(), Intensity = reader.ReadUInt32(), Unknown1 = reader.ReadUInt32(), Unknown2 = reader.ReadUInt32(), Unknown3 = reader.ReadUInt32() }; settings.AlternativeLayoutColorScheme = colorizationParams; } return settings; }
private void LoadOrCreateDefaultSettings() { string settingsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), MainForm.settingsFileName); Settings newSettings; try { byte[] binary = File.ReadAllBytes(settingsFileName); newSettings = Settings.Deserialize(binary); } catch (Exception) { newSettings = Settings.CreateDefaultSettings(); try { File.WriteAllBytes(settingsFileName, Settings.Serialize(newSettings)); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Не удалось сохранить настройки по умолчанию", MessageBoxButtons.OK, MessageBoxIcon.Error); } } settings = newSettings; }
public static byte[] Serialize(Settings settings) { var stream = new MemoryStream(); var defaultLayoutNameBytes = Encoding.UTF8.GetBytes(settings.DefaultLayoutName); stream.Write(BitConverter.GetBytes(defaultLayoutNameBytes.Length), 0, sizeof (int)); stream.Write(defaultLayoutNameBytes, 0, defaultLayoutNameBytes.Length); var buffer = SerializeColorizationParams(settings.DefaultLayoutColorScheme); stream.Write(buffer, 0, buffer.Length); buffer = SerializeColorizationParams(settings.AlternativeLayoutColorScheme); stream.Write(buffer, 0, buffer.Length); return stream.ToArray(); }