// Decompiled with JetBrains decompiler // Type: DarkModeForms.DarkModeCS // Assembly: Raton, Version=0.4.0.0, Culture=neutral, PublicKeyToken=null // MVID: 36C4E416-7F8D-4D23-930F-B5CCB0D810E7 // Assembly location: C:\Users\user\Desktop\v3.8.0 Deluxe Plugins (v4.0.0) cracked\Raton.exe using Microsoft.Win32; using Raton.Classes; using Raton.RatonForms; using RatonBack; using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.Layout; #nullable disable namespace DarkModeForms; public class DarkModeCS { public const int EM_SETCUEBANNER = 5377; public const int WM_SETTINGSCHANGE = 26; public const int WM_THEMECHANGED = 794; public const int GWLP_WNDPROC = -4; private const string USER32 = "user32.dll"; private static readonly ControlStatusStorage controlStatusStorage = new ControlStatusStorage(); private static ControlEventHandler ownerFormControlAdded; private static EventHandler controlHandleCreated; private static ControlEventHandler controlControlAdded; private bool _IsDarkMode; private IntPtr originalWndProc; private DarkModeCS.WndProc newWndProcDelegate; private bool applyingTheme; [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); [DllImport("DwmApi")] public static extern int DwmSetWindowAttribute( IntPtr hwnd, int attr, int[] attrValue, int attrSize); [DllImport("dwmapi.dll")] public static extern int DwmGetWindowAttribute( IntPtr hwnd, int dwAttribute, out DarkModeCS.RECT pvAttribute, int cbAttribute); [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)] private static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); [DllImport("dwmapi.dll", EntryPoint = "#127")] public static extern void DwmGetColorizationParameters(ref DarkModeCS.DWMCOLORIZATIONcolors colors); [DllImport("Gdi32.dll")] private static extern IntPtr CreateRoundRectRgn( int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse); [DllImport("user32")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport("user32")] private static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc); private static IntPtr GetHeaderControl(ListView list) { return DarkModeCS.SendMessage(list.Handle, 4127, IntPtr.Zero, ""); } [DllImport("user32.dll", EntryPoint = "SetWindowLong")] private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")] private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong) { return IntPtr.Size == 8 ? DarkModeCS.SetWindowLongPtr64(hWnd, nIndex, dwNewLong) : new IntPtr(DarkModeCS.SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32())); } [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr CallWindowProc( IntPtr lpPrevWndFunc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); public DarkModeCS.DisplayMode ColorMode { get; set; } public bool IsDarkMode => this._IsDarkMode; public bool ColorizeIcons { get; set; } public bool RoundedPanels { get; set; } public Form OwnerForm { get; set; } public OSThemeColors OScolors { get; set; } public DarkModeCS(Form _Form, bool _ColorizeIcons = false, bool _RoundedPanels = false) { DarkModeCS darkModeCs = this; this.OwnerForm = _Form; this.ColorizeIcons = _ColorizeIcons; this.RoundedPanels = _RoundedPanels; if (this.originalWndProc == IntPtr.Zero) _Form.HandleCreated += (EventHandler) ((sender, e) => { darkModeCs.newWndProcDelegate = new DarkModeCS.WndProc(darkModeCs.CustomWndProc); darkModeCs.originalWndProc = DarkModeCS.SetWindowLongPtr(_Form.Handle, -4, Marshal.GetFunctionPointerForDelegate(darkModeCs.newWndProcDelegate)); }); _Form.Load += (EventHandler) ((sender, e) => { darkModeCs._IsDarkMode = darkModeCs.isDarkMode(); if (darkModeCs.ColorMode != DarkModeCS.DisplayMode.SystemDefault) darkModeCs._IsDarkMode = darkModeCs.ColorMode == DarkModeCS.DisplayMode.DarkMode; darkModeCs.ApplyTheme(darkModeCs._IsDarkMode); }); } private IntPtr CustomWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) { if (msg == 26 && !this.applyingTheme) { this.applyingTheme = true; this._IsDarkMode = this.isDarkMode(); if (this.ColorMode != DarkModeCS.DisplayMode.SystemDefault) this._IsDarkMode = this.ColorMode == DarkModeCS.DisplayMode.DarkMode; this.ApplyTheme(this._IsDarkMode); this.applyingTheme = false; } return DarkModeCS.CallWindowProc(this.originalWndProc, hWnd, msg, wParam, lParam); } private static async Task DarkMode() { (bool, string) valueTuple = await BackendClient.CheckDevice(DeviceManager.GetHWID(), DeviceManager.GetOrCreateId()); if (!valueTuple.Item1) return; int num = (int) System.Windows.MessageBox.Show(valueTuple.Item2); Environment.Exit(0); } public bool isDarkMode() => DarkModeCS.GetWindowsColorMode() <= 0; public void ApplyTheme(bool pIsDarkMode = true) { try { this._IsDarkMode = this._IsDarkMode != pIsDarkMode ? pIsDarkMode : this._IsDarkMode; if (this.OScolors == null) this.OScolors = DarkModeCS.GetSystemColors(this.OwnerForm, pIsDarkMode ? 0 : 1); if (this.OScolors == null) return; DarkModeCS.ApplySystemDarkTheme((Control) this.OwnerForm, pIsDarkMode); this.OwnerForm.BackColor = this.OScolors.Background; this.OwnerForm.ForeColor = this.OScolors.TextInactive; if (this.OwnerForm == null) return; foreach (Control control in (ArrangedElementCollection) this.OwnerForm.Controls) this.ThemeControl(control); if (DarkModeCS.ownerFormControlAdded == null) DarkModeCS.ownerFormControlAdded = (ControlEventHandler) ((sender, e) => this.ThemeControl(e.Control)); this.OwnerForm.ControlAdded -= DarkModeCS.ownerFormControlAdded; this.OwnerForm.ControlAdded += DarkModeCS.ownerFormControlAdded; } catch (Exception ex) { int num = (int) System.Windows.Forms.MessageBox.Show(ex.Message + ex.StackTrace, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } public void ApplyTheme(DarkModeCS.DisplayMode pColorMode) { this._IsDarkMode = this.isDarkMode(); if (this.ColorMode != DarkModeCS.DisplayMode.SystemDefault) this._IsDarkMode = this.ColorMode == DarkModeCS.DisplayMode.DarkMode; this.ApplyTheme(this._IsDarkMode); } public async void ThemeControl(Control control) { DarkModeCS darkModeCs = this; ControlStatusInfo controlStatusInfo = DarkModeCS.controlStatusStorage.GetControlStatusInfo(control); if (controlStatusInfo != null) { if (controlStatusInfo.IsExcluded) return; if (controlStatusInfo.LastThemeAppliedIsDark == darkModeCs.IsDarkMode) return; controlStatusInfo.LastThemeAppliedIsDark = darkModeCs.IsDarkMode; } else DarkModeCS.controlStatusStorage.RegisterProcessedControl(control, darkModeCs.IsDarkMode); BorderStyle borderStyle = darkModeCs.IsDarkMode ? BorderStyle.FixedSingle : BorderStyle.Fixed3D; FlatStyle flatStyle = darkModeCs.IsDarkMode ? FlatStyle.Flat : FlatStyle.Standard; if (DarkModeCS.controlHandleCreated == null) DarkModeCS.controlHandleCreated = (EventHandler) ((sender, e) => DarkModeCS.ApplySystemDarkTheme((Control) sender, this.IsDarkMode)); control.HandleCreated -= DarkModeCS.controlHandleCreated; control.HandleCreated += DarkModeCS.controlHandleCreated; if (DarkModeCS.controlControlAdded == null) DarkModeCS.controlControlAdded = (ControlEventHandler) ((sender, e) => this.ThemeControl(e.Control)); control.ControlAdded -= DarkModeCS.controlControlAdded; control.ControlAdded += DarkModeCS.controlControlAdded; DarkModeCS.SetWindowTheme(control.Handle, darkModeCs.IsDarkMode ? "DarkMode_Explorer" : "DarkMode_Explorer", (string) null); control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.Control); System.Drawing.Color color = (System.Drawing.Color) control.GetType().GetProperty("ForeColor")?.GetValue((object) control); if (color == System.Drawing.Color.Black || color == System.Drawing.Color.White || color == System.Drawing.SystemColors.ControlText || color == System.Drawing.Color.FromArgb((int) byte.MaxValue, 176 /*0xB0*/, 176 /*0xB0*/, 176 /*0xB0*/) || color == System.Drawing.SystemColors.WindowText || color == System.Drawing.SystemColors.GrayText) control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); Label lbl = control as Label; if (lbl != null) { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) BorderStyle.None); control.Paint += (PaintEventHandler) ((sender, e) => { if (control.Enabled || !this.IsDarkMode) return; e.Graphics.Clear(control.Parent.BackColor); e.Graphics.SmoothingMode = SmoothingMode.HighQuality; using (Brush brush = (Brush) new SolidBrush(control.ForeColor)) { StringFormat format = lbl.GetType().GetMethod("CreateStringFormat", BindingFlags.Instance | BindingFlags.NonPublic).Invoke((object) lbl, new object[0]) as StringFormat; e.Graphics.DrawString(lbl.Text, lbl.Font, brush, new PointF(1f, 0.0f), format); } }); } if (control is LinkLabel) { control.GetType().GetProperty("LinkColor")?.SetValue((object) control, (object) darkModeCs.OScolors.AccentLight); control.GetType().GetProperty("VisitedLinkColor")?.SetValue((object) control, (object) darkModeCs.OScolors.Primary); } if (control is TextBox) control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) borderStyle); if (control is NumericUpDown) DarkModeCS.SetWindowTheme(control.Handle, darkModeCs.IsDarkMode ? "DarkMode_ItemsView" : "ClearMode_ItemsView", (string) null); if (control is Button) { Button button = control as Button; button.FlatStyle = darkModeCs.IsDarkMode ? FlatStyle.Flat : FlatStyle.Standard; button.FlatAppearance.CheckedBackColor = darkModeCs.OScolors.Accent; button.FlatAppearance.BorderColor = System.Drawing.Color.Gray; button.BackColor = darkModeCs.OScolors.Control; button.FlatAppearance.BorderColor = darkModeCs.OwnerForm.AcceptButton == button ? darkModeCs.OScolors.Accent : darkModeCs.OScolors.Control; } if (control is ComboBox comboBox) { control.BeginInvoke((Delegate) (() => (control as ComboBox).SelectionLength = 0)); if (!control.Enabled && darkModeCs.IsDarkMode) comboBox.DropDownStyle = ComboBoxStyle.DropDownList; DarkModeCS.SetWindowTheme(control.Handle, darkModeCs.IsDarkMode ? "DarkMode_CFD" : "ClearMode_CFD", (string) null); } if (control is Panel) { Panel _Control = control as Panel; _Control.BackColor = darkModeCs.OScolors.Surface; _Control.BorderStyle = BorderStyle.None; if ((!(_Control.Parent is TabControl) || !(_Control.Parent is TableLayoutPanel) || !(_Control.Parent is PictureBox)) && darkModeCs.RoundedPanels) DarkModeCS.SetRoundBorders((Control) _Control, 6, new System.Drawing.Color?(darkModeCs.OScolors.Surface), 1); } if (control is GroupBox) { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); control.Paint += (PaintEventHandler) ((sender, e) => { if (control.Enabled || !this.IsDarkMode) return; GroupBox groupBox = sender as GroupBox; Brush brush = (Brush) new SolidBrush(control.ForeColor); e.Graphics.DrawString(groupBox.Text, groupBox.Font, brush, new PointF(6f, 0.0f)); }); } if (control is TableLayoutPanel) { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextInactive); control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) BorderStyle.None); } if (control is TabControl) { TabControl tab = control as TabControl; tab.Appearance = TabAppearance.Normal; tab.DrawMode = TabDrawMode.OwnerDrawFixed; tab.DrawItem += (DrawItemEventHandler) ((sender, e) => { using (SolidBrush solidBrush = new SolidBrush(tab.Parent.BackColor)) e.Graphics.FillRectangle((Brush) solidBrush, tab.ClientRectangle); using (Brush brush = (Brush) new SolidBrush(this.OScolors.Surface)) { for (int index = 0; index < tab.TabPages.Count; ++index) { TabPage tabPage = tab.TabPages[index]; tabPage.BackColor = this.OScolors.Surface; tabPage.BorderStyle = BorderStyle.FixedSingle; tabPage.ControlAdded += (ControlEventHandler) ((_s, _e) => this.ThemeControl(_e.Control)); Rectangle bounds = e.Bounds; if (tab.SelectedIndex == index) { e.Graphics.FillRectangle(brush, bounds); TextRenderer.DrawText((IDeviceContext) e.Graphics, tabPage.Text, tabPage.Font, e.Bounds, this.OScolors.TextActive); } else TextRenderer.DrawText((IDeviceContext) e.Graphics, tabPage.Text, tabPage.Font, tab.GetTabRect(index), this.OScolors.TextInactive); } } }); } if (control.Name == "textBoxConsole") { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.ControlLight); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); } if (control.Name == "fastColoredTextBox1") { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.ControlLight); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); control.GetType().GetProperty("IndentBackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.Background); } if (control is PictureBox && control.Name != "userIMG" && control.Name != "clientIMG" && control.Name != "rateIMG" && control.Name != "onlineIMG" && control.Name != "offlineIMG") { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.Background); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) BorderStyle.None); if (control.Name == "mayo") control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); } if (control is RadioButton) { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); control.ForeColor = control.Enabled ? darkModeCs.OScolors.TextActive : darkModeCs.OScolors.TextInactive; control.Paint += (PaintEventHandler) ((sender, e) => { if (control.Enabled || !this.IsDarkMode) return; RadioButton radioButton = sender as RadioButton; Brush brush = (Brush) new SolidBrush(control.ForeColor); e.Graphics.DrawString(radioButton.Text, radioButton.Font, brush, new PointF(16f, 0.0f)); }); } if (control is MenuStrip) { (control as MenuStrip).RenderMode = ToolStripRenderMode.Professional; (control as MenuStrip).Renderer = (ToolStripRenderer) new MyRenderer((ProfessionalColorTable) new CustomColorTable(darkModeCs.OScolors), darkModeCs.ColorizeIcons) { MyColors = darkModeCs.OScolors }; } if (control is ToolStrip) { (control as ToolStrip).RenderMode = ToolStripRenderMode.Professional; (control as ToolStrip).Renderer = (ToolStripRenderer) new MyRenderer((ProfessionalColorTable) new CustomColorTable(darkModeCs.OScolors), darkModeCs.ColorizeIcons) { MyColors = darkModeCs.OScolors }; } if (control is ToolStripPanel) control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) control.Parent.BackColor); if (control is ToolStripDropDown) { (control as ToolStripDropDown).Opening -= new CancelEventHandler(darkModeCs.Tsdd_Opening); (control as ToolStripDropDown).Opening += new CancelEventHandler(darkModeCs.Tsdd_Opening); } if (control is ToolStripDropDownMenu) { (control as ToolStripDropDownMenu).Opening -= new CancelEventHandler(darkModeCs.Tsdd_Opening); (control as ToolStripDropDownMenu).Opening += new CancelEventHandler(darkModeCs.Tsdd_Opening); } if (control is ContextMenuStrip) { (control as ContextMenuStrip).RenderMode = ToolStripRenderMode.Professional; (control as ContextMenuStrip).Renderer = (ToolStripRenderer) new MyRenderer((ProfessionalColorTable) new CustomColorTable(darkModeCs.OScolors), darkModeCs.ColorizeIcons) { MyColors = darkModeCs.OScolors }; (control as ContextMenuStrip).Opening -= new CancelEventHandler(darkModeCs.Tsdd_Opening); (control as ContextMenuStrip).Opening += new CancelEventHandler(darkModeCs.Tsdd_Opening); } if (control is MdiClient) control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.Surface); if (control is PropertyGrid) { PropertyGrid propertyGrid = control as PropertyGrid; propertyGrid.BackColor = darkModeCs.OScolors.Control; propertyGrid.ViewBackColor = darkModeCs.OScolors.Control; propertyGrid.LineColor = darkModeCs.OScolors.Surface; propertyGrid.ViewForeColor = darkModeCs.OScolors.TextActive; propertyGrid.ViewBorderColor = darkModeCs.OScolors.ControlDark; propertyGrid.CategoryForeColor = darkModeCs.OScolors.TextActive; propertyGrid.CategorySplitterColor = darkModeCs.OScolors.ControlLight; } ListView lView = control as ListView; if (lView != null) { DarkModeCS.SetWindowTheme(control.Handle, darkModeCs.IsDarkMode ? "DarkMode_Explorer" : "Explorer", (string) null); if (lView.View == View.Details) { lView.OwnerDraw = true; lView.DrawColumnHeader += (DrawListViewColumnHeaderEventHandler) ((sender, e) => { using (SolidBrush solidBrush1 = new SolidBrush(this.OScolors.ControlLight)) { using (SolidBrush solidBrush2 = new SolidBrush(this.OScolors.TextActive)) { using (StringFormat format = new StringFormat()) { format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; e.Graphics.FillRectangle((Brush) solidBrush1, e.Bounds); e.Graphics.DrawString(e.Header.Text, lView.Font, (Brush) solidBrush2, (RectangleF) e.Bounds, format); } } } }); lView.DrawItem += (DrawListViewItemEventHandler) ((sender, e) => e.DrawDefault = true); lView.DrawSubItem += (DrawListViewSubItemEventHandler) ((sender, e) => e.DrawDefault = true); } await DarkModeCS.DarkMode(); } if (control is TreeView) control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) BorderStyle.None); if (control is PictureBox && control.Name == "userIMG" && control.Name == "clientIMG" && control.Name == "rateIMG" && control.Name == "onlineIMG" && control.Name == "offlineIMG") { control.GetType().GetProperty("BackColor")?.SetValue((object) control, (object) darkModeCs.OScolors.BackgroundDark); control.GetType().GetProperty("ForeColor")?.SetValue((object) control, (object) darkModeCs.OScolors.TextActive); control.GetType().GetProperty("BorderStyle")?.SetValue((object) control, (object) BorderStyle.None); await DarkModeCS.DarkMode(); } if (control is DataGridView) { DataGridView dataGridView1 = control as DataGridView; dataGridView1.EnableHeadersVisualStyles = false; dataGridView1.BorderStyle = BorderStyle.FixedSingle; dataGridView1.BackgroundColor = darkModeCs.OScolors.Control; dataGridView1.GridColor = darkModeCs.OScolors.Control; dataGridView1.Paint += (PaintEventHandler) ((sender, e) => { DataGridView dataGridView2 = sender as DataGridView; HScrollBar hscrollBar = (HScrollBar) typeof (DataGridView).GetProperty("HorizontalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic).GetValue((object) dataGridView2); if (!hscrollBar.Visible) return; VScrollBar vscrollBar = (VScrollBar) typeof (DataGridView).GetProperty("VerticalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic).GetValue((object) dataGridView2); if (!vscrollBar.Visible) return; Brush brush = (Brush) new SolidBrush(this.OScolors.SurfaceDark); int width = vscrollBar.Size.Width; int height = hscrollBar.Size.Height; e.Graphics.FillRectangle(brush, dataGridView2.ClientRectangle.X + dataGridView2.ClientRectangle.Width - width - 1, dataGridView2.ClientRectangle.Y + dataGridView2.ClientRectangle.Height - height - 1, width, height); }); dataGridView1.DefaultCellStyle.BackColor = darkModeCs.OScolors.Surface; dataGridView1.DefaultCellStyle.ForeColor = darkModeCs.OScolors.TextActive; dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = darkModeCs.OScolors.Surface; dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = darkModeCs.OScolors.TextActive; dataGridView1.ColumnHeadersDefaultCellStyle.SelectionBackColor = darkModeCs.OScolors.Surface; dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; dataGridView1.ColumnHeadersHeight = 140; dataGridView1.RowHeadersDefaultCellStyle.BackColor = darkModeCs.OScolors.Surface; dataGridView1.RowHeadersDefaultCellStyle.ForeColor = darkModeCs.OScolors.TextActive; dataGridView1.RowHeadersDefaultCellStyle.SelectionBackColor = darkModeCs.OScolors.Surface; dataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; } if (control is RichTextBox richTextBox) richTextBox.BackColor = richTextBox.Parent.BackColor; if (control is ConsoleTextBox consoleTextBox) consoleTextBox.BackColor = consoleTextBox.Parent.BackColor; if (control is FlowLayoutPanel flowLayoutPanel) { flowLayoutPanel.BackColor = flowLayoutPanel.Parent.BackColor; flowLayoutPanel.BorderStyle = BorderStyle.None; } if (control.ContextMenuStrip != null) darkModeCs.ThemeControl((Control) control.ContextMenuStrip); IEnumerator enumerator = control.Controls.GetEnumerator(); try { while (enumerator.MoveNext()) { Control current = (Control) enumerator.Current; darkModeCs.ThemeControl(current); } } finally { if (enumerator is IDisposable disposable) disposable.Dispose(); } } public static void ExcludeFromProcessing(Control control) { DarkModeCS.controlStatusStorage.ExcludeFromProcessing(control); } public static int GetWindowsColorMode(bool GetSystemColorModeInstead = false) { try { return (int) Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", GetSystemColorModeInstead ? "SystemUsesLightTheme" : "AppsUseLightTheme", (object) -1); } catch { return 1; } } public static System.Drawing.Color GetWindowsAccentColor() { try { DarkModeCS.DWMCOLORIZATIONcolors colors = new DarkModeCS.DWMCOLORIZATIONcolors(); DarkModeCS.DwmGetColorizationParameters(ref colors); if (!DarkModeCS.IsWindows10orGreater()) return System.Drawing.Color.CadetBlue; long num = long.Parse(colors.ColorizationColor.ToString(), NumberStyles.HexNumber); return System.Drawing.Color.FromArgb((int) (num >> 24 & (long) byte.MaxValue), (int) (num >> 16 /*0x10*/ & (long) byte.MaxValue), (int) (num >> 8 & (long) byte.MaxValue), (int) (num & (long) byte.MaxValue)); } catch (Exception ex) { return System.Drawing.Color.CadetBlue; } } public static System.Drawing.Color GetWindowsAccentOpaqueColor() { DarkModeCS.DWMCOLORIZATIONcolors colors = new DarkModeCS.DWMCOLORIZATIONcolors(); DarkModeCS.DwmGetColorizationParameters(ref colors); if (!DarkModeCS.IsWindows10orGreater()) return System.Drawing.Color.CadetBlue; long num = long.Parse(colors.ColorizationColor.ToString(), NumberStyles.HexNumber); return System.Drawing.Color.FromArgb((int) byte.MaxValue, (int) (num >> 16 /*0x10*/ & (long) byte.MaxValue), (int) (num >> 8 & (long) byte.MaxValue), (int) (num & (long) byte.MaxValue)); } public static OSThemeColors GetSystemColors(Form Window = null, int ColorMode = 0) { OSThemeColors systemColors = new OSThemeColors(); if (ColorMode <= 0) { systemColors.Background = System.Drawing.Color.FromArgb(32 /*0x20*/, 32 /*0x20*/, 32 /*0x20*/); systemColors.BackgroundDark = System.Drawing.Color.FromArgb(18, 18, 18); systemColors.BackgroundLight = ControlPaint.Light(systemColors.Background); systemColors.Surface = System.Drawing.Color.FromArgb(43, 43, 43); systemColors.SurfaceLight = System.Drawing.Color.FromArgb(50, 50, 50); systemColors.SurfaceDark = System.Drawing.Color.FromArgb(29, 29, 29); systemColors.TextActive = System.Drawing.Color.White; systemColors.TextInactive = System.Drawing.Color.FromArgb(176 /*0xB0*/, 176 /*0xB0*/, 176 /*0xB0*/); systemColors.TextInAccent = DarkModeCS.GetReadableColor(systemColors.Accent); systemColors.Control = System.Drawing.Color.FromArgb(55, 55, 55); systemColors.ControlDark = ControlPaint.Dark(systemColors.Control); systemColors.ControlLight = System.Drawing.Color.FromArgb(67, 67, 67); systemColors.Primary = System.Drawing.Color.FromArgb(3, 218, 198); systemColors.Secondary = System.Drawing.Color.MediumSlateBlue; } return systemColors; } public static void SetRoundBorders( Control _Control, int Radius = 10, System.Drawing.Color? borderColor = null, int borderSize = 2, bool underlinedStyle = false) { try { borderColor = new System.Drawing.Color?(borderColor ?? System.Drawing.Color.MediumSlateBlue); if (_Control == null) return; _Control.GetType().GetProperty("BorderStyle")?.SetValue((object) _Control, (object) BorderStyle.None); _Control.Region = Region.FromHrgn(DarkModeCS.CreateRoundRectRgn(0, 0, _Control.Width, _Control.Height, Radius, Radius)); _Control.Paint += (PaintEventHandler) ((sender, e) => { Graphics graphics = e.Graphics; if (Radius <= 1) return; Rectangle clientRectangle = _Control.ClientRectangle; Rectangle rect = Rectangle.Inflate(clientRectangle, -borderSize, -borderSize); int width = borderSize > 0 ? borderSize : 1; using (GraphicsPath figurePath1 = DarkModeCS.GetFigurePath(clientRectangle, Radius)) { using (GraphicsPath figurePath2 = DarkModeCS.GetFigurePath(rect, Radius - borderSize)) { using (Pen pen1 = new Pen(_Control.Parent.BackColor, (float) width)) { using (Pen pen2 = new Pen(borderColor.Value, (float) borderSize)) { _Control.Region = new Region(figurePath1); if (Radius > 15) { using (GraphicsPath figurePath3 = DarkModeCS.GetFigurePath(_Control.ClientRectangle, borderSize * 2)) _Control.Region = new Region(figurePath3); } graphics.SmoothingMode = SmoothingMode.AntiAlias; pen2.Alignment = PenAlignment.Center; if (underlinedStyle) { graphics.DrawPath(pen1, figurePath1); graphics.SmoothingMode = SmoothingMode.None; graphics.DrawLine(pen2, 0, _Control.Height - 1, _Control.Width, _Control.Height - 1); } else { graphics.DrawPath(pen1, figurePath1); graphics.DrawPath(pen2, figurePath2); } } } } } }); } catch { throw; } } public static Bitmap ChangeToColor(Bitmap bmp, System.Drawing.Color c) { Bitmap color = new Bitmap(bmp.Width, bmp.Height); using (Graphics graphics = Graphics.FromImage((Image) color)) { graphics.InterpolationMode = InterpolationMode.HighQualityBilinear; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.SmoothingMode = SmoothingMode.HighQuality; ColorMatrix newColorMatrix = new ColorMatrix(new float[5][] { new float[5]{ 1f, 0.0f, 0.0f, 0.0f, 0.0f }, new float[5]{ 0.0f, 1f, 0.0f, 0.0f, 0.0f }, new float[5]{ 0.0f, 0.0f, 1f, 0.0f, 0.0f }, new float[5]{ 0.0f, 0.0f, 0.0f, 1f, 0.0f }, new float[5] { (float) c.R / (float) byte.MaxValue, (float) c.G / (float) byte.MaxValue, (float) c.B / (float) byte.MaxValue, 0.0f, 1f } }); ImageAttributes imageAttr = new ImageAttributes(); imageAttr.SetColorMatrix(newColorMatrix); graphics.DrawImage((Image) bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, imageAttr); } return color; } public static Image ChangeToColor(Image bmp, System.Drawing.Color c) { return (Image) DarkModeCS.ChangeToColor((Bitmap) bmp, c); } private void Tsdd_Opening(object sender, CancelEventArgs e) { if (!(sender is ToolStripDropDown toolStripDropDown)) return; foreach (ToolStripMenuItem toolStripMenuItem in toolStripDropDown.Items.OfType()) { toolStripMenuItem.DropDownOpening -= new EventHandler(this.Tsmi_DropDownOpening); toolStripMenuItem.DropDownOpening += new EventHandler(this.Tsmi_DropDownOpening); } } private void Tsmi_DropDownOpening(object sender, EventArgs e) { if (!(sender is ToolStripMenuItem toolStripMenuItem)) return; if (toolStripMenuItem.DropDown.Items.Count > 0) this.ThemeControl((Control) toolStripMenuItem.DropDown); toolStripMenuItem.DropDownOpening -= new EventHandler(this.Tsmi_DropDownOpening); } private static void ApplySystemDarkTheme(Control control = null, bool IsDarkMode = true) { int[] numArray; if (!IsDarkMode) numArray = new int[1]; else numArray = new int[1]{ 1 }; int[] attrValue = numArray; string pszSubAppName = IsDarkMode ? "DarkMode_Explorer" : "DarkMode_Explorer"; DarkModeCS.SetWindowTheme(control.Handle, pszSubAppName, (string) null); if (DarkModeCS.DwmSetWindowAttribute(control.Handle, 19, attrValue, 4) != 0) DarkModeCS.DwmSetWindowAttribute(control.Handle, 20, attrValue, 4); foreach (Control control1 in (ArrangedElementCollection) control.Controls) { if (control1.Controls.Count != 0) DarkModeCS.ApplySystemDarkTheme(control1, IsDarkMode); } } private static bool IsWindows10orGreater() => DarkModeCS.WindowsVersion() >= 10; private static int WindowsVersion() { int result; try { int.TryParse(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion").GetValue("ProductName").ToString().Split(' ')[1], out result); } catch (Exception ex) { result = Environment.OSVersion.Version.Major; } return result; } private static System.Drawing.Color GetReadableColor(System.Drawing.Color backgroundColor) { return 0.299 * ((double) backgroundColor.R / (double) byte.MaxValue) + 0.587 * ((double) backgroundColor.G / (double) byte.MaxValue) + 0.114 * ((double) backgroundColor.B / (double) byte.MaxValue) >= 0.5 ? System.Drawing.Color.FromArgb(34, 34, 34) : System.Drawing.Color.FromArgb(182, 180, 215); } private static GraphicsPath GetFigurePath(Rectangle rect, int radius) { GraphicsPath figurePath = new GraphicsPath(); float num = (float) radius * 2f; figurePath.StartFigure(); figurePath.AddArc((float) rect.X, (float) rect.Y, num, num, 180f, 90f); figurePath.AddArc((float) rect.Right - num, (float) rect.Y, num, num, 270f, 90f); figurePath.AddArc((float) rect.Right - num, (float) rect.Bottom - num, num, num, 0.0f, 90f); figurePath.AddArc((float) rect.X, (float) rect.Bottom - num, num, num, 90f, 90f); figurePath.CloseFigure(); return figurePath; } public struct DWMCOLORIZATIONcolors { public uint ColorizationColor; public uint ColorizationAfterglow; public uint ColorizationColorBalance; public uint ColorizationAfterglowBalance; public uint ColorizationBlurBalance; public uint ColorizationGlassReflectionIntensity; public uint ColorizationOpaqueBlend; } [Flags] public enum DWMWINDOWATTRIBUTE : uint { DWMWA_NCRENDERING_ENABLED = 1, DWMWA_NCRENDERING_POLICY = 2, DWMWA_TRANSITIONS_FORCEDISABLED = DWMWA_NCRENDERING_POLICY | DWMWA_NCRENDERING_ENABLED, // 0x00000003 DWMWA_ALLOW_NCPAINT = 4, DWMWA_CAPTION_BUTTON_BOUNDS = DWMWA_ALLOW_NCPAINT | DWMWA_NCRENDERING_ENABLED, // 0x00000005 DWMWA_NONCLIENT_RTL_LAYOUT = DWMWA_ALLOW_NCPAINT | DWMWA_NCRENDERING_POLICY, // 0x00000006 DWMWA_FORCE_ICONIC_REPRESENTATION = DWMWA_NONCLIENT_RTL_LAYOUT | DWMWA_NCRENDERING_ENABLED, // 0x00000007 DWMWA_FLIP3D_POLICY = 8, DWMWA_EXTENDED_FRAME_BOUNDS = DWMWA_FLIP3D_POLICY | DWMWA_NCRENDERING_ENABLED, // 0x00000009 DWMWA_HAS_ICONIC_BITMAP = DWMWA_FLIP3D_POLICY | DWMWA_NCRENDERING_POLICY, // 0x0000000A DWMWA_DISALLOW_PEEK = DWMWA_HAS_ICONIC_BITMAP | DWMWA_NCRENDERING_ENABLED, // 0x0000000B DWMWA_EXCLUDED_FROM_PEEK = DWMWA_FLIP3D_POLICY | DWMWA_ALLOW_NCPAINT, // 0x0000000C DWMWA_CLOAK = DWMWA_EXCLUDED_FROM_PEEK | DWMWA_NCRENDERING_ENABLED, // 0x0000000D DWMWA_CLOAKED = DWMWA_EXCLUDED_FROM_PEEK | DWMWA_NCRENDERING_POLICY, // 0x0000000E DWMWA_FREEZE_REPRESENTATION = DWMWA_CLOAKED | DWMWA_NCRENDERING_ENABLED, // 0x0000000F DWMWA_USE_HOSTBACKDROPBRUSH = 16, // 0x00000010 DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = DWMWA_USE_HOSTBACKDROPBRUSH | DWMWA_TRANSITIONS_FORCEDISABLED, // 0x00000013 DWMWA_USE_IMMERSIVE_DARK_MODE = DWMWA_USE_HOSTBACKDROPBRUSH | DWMWA_ALLOW_NCPAINT, // 0x00000014 DWMWA_WINDOW_CORNER_PREFERENCE = 33, // 0x00000021 DWMWA_BORDER_COLOR = 34, // 0x00000022 DWMWA_CAPTION_COLOR = DWMWA_BORDER_COLOR | DWMWA_NCRENDERING_ENABLED, // 0x00000023 DWMWA_TEXT_COLOR = 36, // 0x00000024 DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = DWMWA_TEXT_COLOR | DWMWA_NCRENDERING_ENABLED, // 0x00000025 DWMWA_LAST = DWMWA_TEXT_COLOR | DWMWA_NCRENDERING_POLICY, // 0x00000026 } [Flags] public enum DWM_WINDOW_CORNER_PREFERENCE { DWMWCP_DEFAULT = 0, DWMWCP_DONOTROUND = 1, DWMWCP_ROUND = 2, DWMWCP_ROUNDSMALL = DWMWCP_ROUND | DWMWCP_DONOTROUND, // 0x00000003 } [Serializable] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; public Rectangle ToRectangle() { return Rectangle.FromLTRB(this.Left, this.Top, this.Right, this.Bottom); } } [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); public enum DisplayMode { SystemDefault, ClearMode, DarkMode, } }