|
|
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Security;
- using System.Threading;
- using System.Windows.Forms;
- using Ameliorated.ConsoleUtils;
- using System.Drawing;
- using System.Security.AccessControl;
- using System.Security.Principal;
-
- namespace amecs.Actions
- {
- public class Profile
- {
- 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;
- }
-
- ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting profile image");
-
- using (new ConsoleUtils.LoadingIndicator(true))
- {
- var pfpDir = Path.Combine(Environment.ExpandEnvironmentVariables("%PUBLIC%\\AccountPictures"), Globals.UserSID);
-
- if (Directory.Exists(pfpDir))
- {
- try
- {
- Directory.Delete(pfpDir, true);
- } catch (Exception e)
- {
- var logdi = new DirectoryInfo(pfpDir) { Attributes = FileAttributes.Normal };
- try
- {
- NSudo.GetOwnershipPrivilege();
-
- var logdirsec = logdi.GetAccessControl();
- logdirsec.SetOwner(WindowsIdentity.GetCurrent().User);
-
- logdi.SetAccessControl(logdirsec);
-
- logdirsec = new DirectorySecurity();
- logdirsec.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().User, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
- logdi.SetAccessControl(logdirsec);
-
- } catch (Exception exception)
- {
-
- }
- foreach (var info in logdi.GetFileSystemInfos("*", SearchOption.AllDirectories))
- {
- info.Attributes = FileAttributes.Normal;
- }
-
- Directory.Delete(pfpDir, true);
- }
- }
- Directory.CreateDirectory(pfpDir);
-
- var image = Image.FromFile(file);
- var pfpKey = @"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\" + Globals.UserSID;
- new Reg.Key() { KeyName = pfpKey, Operation = RegistryOperation.Delete }.Apply();
-
- foreach (var res in new [] { 32, 40, 48, 64, 96, 192, 208, 240, 424, 448, 1080 })
- {
- var bitmap = new Bitmap(res, res);
- var graph = Graphics.FromImage(bitmap);
- graph.DrawImage(image, 0, 0, res, res);
-
- var saveLoc = Path.Combine(pfpDir, $"{res}x{res}.png");
- bitmap.Save(saveLoc);
-
- new Reg.Value() { KeyName = pfpKey, ValueName = "Image" + res, Type = Reg.RegistryValueType.REG_SZ, Data = saveLoc }.Apply();
- }
- new Reg.Value() { KeyName = pfpKey, ValueName = "UserPicturePath", Type = Reg.RegistryValueType.REG_SZ, Data = Path.Combine(pfpDir, $"448x448.png") }.Apply();
-
- try
- {
- Process proc = new Process();
- proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
- proc.StartInfo.FileName = "gpupdate.exe";
- proc.StartInfo.Arguments = "/force";
- proc.Start();
- proc.WaitForExit(20000);
- } catch { }
-
- }
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Profile 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;
- }
- }
- }
- }
|