public static void ChangeTheme(DS4Windows.AppThemeChoice themeChoice) { if (themeLocs.TryGetValue(themeChoice, out string loc)) { Application.Current.Resources.MergedDictionaries.Clear(); Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(loc, uriKind: UriKind.Relative) }); } }
public void ChangeTheme(DS4Windows.AppThemeChoice themeChoice, bool fireChanged = true) { if (themeLocs.TryGetValue(themeChoice, out string loc)) { Application.Current.Resources.MergedDictionaries.Clear(); Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(loc, uriKind: UriKind.Relative) }); if (fireChanged) { ThemeChanged?.Invoke(this, EventArgs.Empty); } } }
private void Application_Startup(object sender, StartupEventArgs e) { runShutdown = true; skipSave = true; ArgumentParser parser = new ArgumentParser(); parser.Parse(e.Args); CheckOptions(parser); if (exitApp) { return; } try { Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; } catch { } // Ignore problems raising the priority. // Force Normal IO Priority IntPtr ioPrio = new IntPtr(2); DS4Windows.Util.NtSetInformationProcess(Process.GetCurrentProcess().Handle, DS4Windows.Util.PROCESS_INFORMATION_CLASS.ProcessIoPriority, ref ioPrio, 4); // Force Normal Page Priority IntPtr pagePrio = new IntPtr(5); DS4Windows.Util.NtSetInformationProcess(Process.GetCurrentProcess().Handle, DS4Windows.Util.PROCESS_INFORMATION_CLASS.ProcessPagePriority, ref pagePrio, 4); try { // another instance is already running if OpenExisting succeeds. threadComEvent = EventWaitHandle.OpenExisting(SingleAppComEventName, System.Security.AccessControl.EventWaitHandleRights.Synchronize | System.Security.AccessControl.EventWaitHandleRights.Modify); threadComEvent.Set(); // signal the other instance. threadComEvent.Close(); Current.Shutdown(); // Quit temp instance runShutdown = false; return; } catch { /* don't care about errors */ } // Create the Event handle threadComEvent = new EventWaitHandle(false, EventResetMode.ManualReset, SingleAppComEventName); CreateTempWorkerThread(); CreateControlService(); RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; DS4Windows.Global.FindConfigLocation(); bool firstRun = DS4Windows.Global.firstRun; if (firstRun) { DS4Forms.SaveWhere savewh = new DS4Forms.SaveWhere(false); savewh.ShowDialog(); } DS4Windows.Global.Load(); if (!CreateConfDirSkeleton()) { MessageBox.Show($"Cannot create config folder structure in {DS4Windows.Global.appdatapath}. Exiting", "DS4Windows", MessageBoxButton.OK, MessageBoxImage.Error); Current.Shutdown(1); } logHolder = new LoggerHolder(rootHub); DispatcherUnhandledException += App_DispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Logger logger = logHolder.Logger; string version = DS4Windows.Global.exeversion; logger.Info($"DS4Windows version {version}"); logger.Info($"DS4Windows exe file: {DS4Windows.Global.exeFileName}"); logger.Info($"DS4Windows Assembly Architecture: {(Environment.Is64BitProcess ? "x64" : "x86")}"); logger.Info($"OS Version: {Environment.OSVersion}"); logger.Info($"OS Product Name: {DS4Windows.Util.GetOSProductName()}"); logger.Info($"OS Release ID: {DS4Windows.Util.GetOSReleaseId()}"); logger.Info($"System Architecture: {(Environment.Is64BitOperatingSystem ? "x64" : "x86")}"); //logger.Info("DS4Windows version 2.0"); logger.Info("Logger created"); //DS4Windows.Global.ProfilePath[0] = "mixed"; //DS4Windows.Global.LoadProfile(0, false, rootHub, false, false); if (firstRun) { logger.Info("No config found. Creating default config"); //Directory.CreateDirectory(DS4Windows.Global.appdatapath); AttemptSave(); //Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Profiles\"); //Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Macros\"); DS4Windows.Global.SaveAsNewProfile(0, "Default"); DS4Windows.Global.ProfilePath[0] = DS4Windows.Global.OlderProfilePath[0] = "Default"; /*DS4Windows.Global.ProfilePath[1] = DS4Windows.Global.OlderProfilePath[1] = "Default"; * DS4Windows.Global.ProfilePath[2] = DS4Windows.Global.OlderProfilePath[2] = "Default"; * DS4Windows.Global.ProfilePath[3] = DS4Windows.Global.OlderProfilePath[3] = "Default"; */ logger.Info("Default config created"); } skipSave = false; if (!DS4Windows.Global.LoadActions()) { DS4Windows.Global.CreateStdActions(); } SetUICulture(DS4Windows.Global.UseLang); DS4Windows.AppThemeChoice themeChoice = DS4Windows.Global.UseCurrentTheme; if (themeChoice != DS4Windows.AppThemeChoice.Default) { ChangeTheme(DS4Windows.Global.UseCurrentTheme, false); } DS4Windows.Global.LoadLinkedProfiles(); DS4Forms.MainWindow window = new DS4Forms.MainWindow(parser); MainWindow = window; window.Show(); HwndSource source = PresentationSource.FromVisual(window) as HwndSource; CreateIPCClassNameMMF(source.Handle); window.CheckMinStatus(); rootHub.LogDebug($"Running as {(DS4Windows.Global.IsAdministrator() ? "Admin" : "User")}"); rootHub.LaunchHidGuardHelper(); rootHub.LoadPermanentSlotsConfig(); window.LateChecks(parser); }