using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Security; using System.Threading; using Ameliorated.ConsoleUtils; using Microsoft.Win32; using System.Windows.Forms; namespace amecs.Actions { public class Lockscreen { public static bool ChangeImage() { ConsoleTUI.OpenFrame.WriteCenteredLine("Select an image"); Thread.Sleep(1000); var dialog = new System.Windows.Forms.OpenFileDialog(); dialog.Filter = "Image Files (*.jpg; *.jpeg; *.png; *.bmp; *.jfif)| *.jpg; *.jpeg; *.png; *.bmp; *.jfif"; // Filter files by extension dialog.Multiselect = false; dialog.InitialDirectory = Globals.UserFolder; NativeWindow window = new NativeWindow(); window.AssignHandle(Process.GetCurrentProcess().MainWindowHandle); if (dialog.ShowDialog(window) == DialogResult.OK) { string file; try { file = dialog.FileName; } catch (SecurityException e) { Console.WriteLine(); ConsoleTUI.OpenFrame.Close("Security error: " + e.Message, ConsoleColor.Red, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "}); return false; } Console.WriteLine(); var choice = new ChoicePrompt() { Text = "Remove lockscreen blur? (Y/N): " }.Start(); if (!choice.HasValue) return true; bool blur = choice == 0; ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting lockscreen image"); using (new ConsoleUtils.LoadingIndicator(true)) { Thread.Sleep(500); try { if (blur) new Reg.Value() { KeyName = @"HKLM\SOFTWARE\Policies\Microsoft\Windows\System", ValueName = "DisableAcrylicBackgroundOnLogon", Type = Reg.RegistryValueType.REG_DWORD, Data = 1, }.Apply(); else new Reg.Value() { KeyName = @"HKLM\SOFTWARE\Policies\Microsoft\Windows\System", ValueName = "DisableAcrylicBackgroundOnLogon", Type = Reg.RegistryValueType.REG_DWORD, Data = 0, }.Apply(); } catch { } new Reg.Value() { KeyName = @"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\" + Globals.UserSID, ValueName = "RotatingLockScreenEnabled", Type = Reg.RegistryValueType.REG_DWORD, Data = 0, }.Apply(); new Reg.Value() { KeyName = @$"HKU\{Globals.UserSID}\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager", ValueName = "RotatingLockScreenEnabled", Type = Reg.RegistryValueType.REG_DWORD, Data = 0, }.Apply(); File.Delete(Environment.ExpandEnvironmentVariables(@"%WINDIR%\Web\Screen\img100.jpg")); File.Copy(file, Environment.ExpandEnvironmentVariables(@"%WINDIR%\Web\Screen\img100.jpg")); foreach (var dataDir in Directory.EnumerateDirectories(Environment.ExpandEnvironmentVariables(@"%PROGRAMDATA%\Microsoft\Windows\SystemData"))) { var subDir = Path.Combine(dataDir, "ReadOnly"); if (!Directory.Exists(subDir)) continue; Directory.GetDirectories(subDir, "Lockscreen_*").ToList().ForEach(x => Directory.Delete(x, true)); } } Console.WriteLine(); ConsoleTUI.OpenFrame.Close("Lockscreen image changed successfully", ConsoleColor.Green, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "}); return true; } else { Console.WriteLine(); ConsoleTUI.OpenFrame.Close("You must select an image.", new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "}); return true; } } } }