Skip to content

Commit 79f3734

Browse files
committed
Implemented run as admin and randomize window title option
1 parent 7763364 commit 79f3734

File tree

8 files changed

+103
-25
lines changed

8 files changed

+103
-25
lines changed

ReClass.NET/Forms/MainForm.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,25 @@ public MainForm()
6363

6464
InitializeComponent();
6565

66-
Text = $"{Constants.ApplicationName} ({Constants.Platform})";
66+
string randomWindowTitle = Utils.RandomString(Program.GlobalRandom.Next(15, 20));
67+
68+
Text = $"{(Program.Settings.RandomizeWindowTitle ? randomWindowTitle : Constants.ApplicationName)} ({Constants.Platform})";
6769

6870
mainMenuStrip.Renderer = new CustomToolStripProfessionalRenderer(true, true);
6971
toolStrip.Renderer = new CustomToolStripProfessionalRenderer(true, false);
7072

7173
Program.RemoteProcess.ProcessAttached += sender =>
7274
{
75+
string randomWindowTitle = Utils.RandomString(Program.GlobalRandom.Next(15, 20));
7376
var text = $"{sender.UnderlayingProcess.Name} (ID: {sender.UnderlayingProcess.Id.ToString()})";
7477

75-
Text = $"{Constants.ApplicationName} ({Constants.Platform}) - {text}";
78+
Text = $"{(Program.Settings.RandomizeWindowTitle ? randomWindowTitle : Constants.ApplicationName)} ({Constants.Platform}) - {text}";
7679
processInfoToolStripStatusLabel.Text = text;
7780
};
7881
Program.RemoteProcess.ProcessClosed += sender =>
7982
{
80-
Text = $"{Constants.ApplicationName} ({Constants.Platform})";
83+
string randomWindowTitle = Utils.RandomString(Program.GlobalRandom.Next(15, 20));
84+
Text = $"{(Program.Settings.RandomizeWindowTitle ? randomWindowTitle : Constants.ApplicationName)} ({Constants.Platform})";
8185
processInfoToolStripStatusLabel.Text = "No process selected";
8286
};
8387

ReClass.NET/Forms/SettingsForm.Designer.cs

Lines changed: 48 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ReClass.NET/Forms/SettingsForm.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics;
23
using System.Diagnostics.Contracts;
34
using System.Windows.Forms;
45
using ReClassNET.Extensions;
@@ -105,6 +106,8 @@ private void SetGeneralBindings()
105106
SetBinding(showSymbolsCheckBox, nameof(CheckBox.Checked), settings, nameof(Settings.ShowCommentSymbol));
106107
SetBinding(showStringCheckBox, nameof(CheckBox.Checked), settings, nameof(Settings.ShowCommentString));
107108
SetBinding(showPluginInfoCheckBox, nameof(CheckBox.Checked), settings, nameof(Settings.ShowCommentPluginInfo));
109+
SetBinding(runAsAdminCheckBox, nameof(CheckBox.Checked), settings, nameof(Settings.RunAsAdmin));
110+
SetBinding(randomizeWindowTitleCheckBox, nameof(CheckBox.Checked), settings, nameof(Settings.RandomizeWindowTitle));
108111
}
109112

110113
private void SetColorBindings()
@@ -149,5 +152,20 @@ private void SetTypedefinitionBindings()
149152
SetBinding(utf16TextTypeTextBox, nameof(TextBox.Text), typeMapping, nameof(CppTypeMapping.TypeUtf16Text));
150153
SetBinding(functionPtrTypeTextBox, nameof(TextBox.Text), typeMapping, nameof(CppTypeMapping.TypeFunctionPtr));
151154
}
155+
156+
private void runAsAdminCheckBox_CheckedChanged(object sender, EventArgs e)
157+
{
158+
settings.RunAsAdmin = runAsAdminCheckBox.Checked;
159+
160+
if (runAsAdminCheckBox.Checked && !WinUtil.IsAdministrator)
161+
{
162+
var msgboxResult = MessageBox.Show("Would you like to restart ReClass.NET as administrator now?", "ReClass.NET", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
163+
if(msgboxResult == DialogResult.Yes)
164+
{
165+
WinUtil.RunElevated(Process.GetCurrentProcess().MainModule.FileName, string.Empty);
166+
Program.MainForm.Close();
167+
}
168+
}
169+
}
152170
}
153171
}

ReClass.NET/Program.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics;
23
using System.Drawing;
34
using System.Globalization;
45
using System.Windows.Forms;
@@ -66,6 +67,13 @@ static void Main(string[] args)
6667
Settings = SettingsSerializer.Load();
6768
Logger = new GuiLogger();
6869

70+
if(Settings.RunAsAdmin && !WinUtil.IsAdministrator)
71+
{
72+
//todo: maybe better paramaters than just the first one?
73+
WinUtil.RunElevated(Process.GetCurrentProcess().MainModule.FileName, CommandLineArgs.FileName);
74+
return;
75+
}
76+
6977
#if !DEBUG
7078
try
7179
{

ReClass.NET/Settings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ public class Settings
1212

1313
public bool StayOnTop { get; set; } = false;
1414

15+
public bool RunAsAdmin { get; set; } = false;
16+
17+
public bool RandomizeWindowTitle { get; set; } = false;
18+
1519
// Node Drawing Settings
1620

1721
public bool ShowNodeAddress { get; set; } = true;

ReClass.NET/Util/SettingsSerializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static Settings Load()
3535
{
3636
XElementSerializer.TryRead(general, nameof(settings.LastProcess), e => settings.LastProcess = XElementSerializer.ToString(e));
3737
XElementSerializer.TryRead(general, nameof(settings.StayOnTop), e => settings.StayOnTop = XElementSerializer.ToBool(e));
38+
XElementSerializer.TryRead(general, nameof(settings.RunAsAdmin), e => settings.RunAsAdmin = XElementSerializer.ToBool(e));
39+
XElementSerializer.TryRead(general, nameof(settings.RandomizeWindowTitle), e => settings.RandomizeWindowTitle = XElementSerializer.ToBool(e));
3840
}
3941
var display = root?.Element(XmlDisplayElement);
4042
if (display != null)
@@ -105,7 +107,9 @@ public static void Save(Settings settings)
105107
new XElement(
106108
XmlGeneralElement,
107109
XElementSerializer.ToXml(nameof(settings.LastProcess), settings.LastProcess),
108-
XElementSerializer.ToXml(nameof(settings.StayOnTop), settings.StayOnTop)
110+
XElementSerializer.ToXml(nameof(settings.StayOnTop), settings.StayOnTop),
111+
XElementSerializer.ToXml(nameof(settings.RunAsAdmin), settings.RunAsAdmin),
112+
XElementSerializer.ToXml(nameof(settings.RandomizeWindowTitle), settings.RandomizeWindowTitle)
109113
),
110114
new XElement(
111115
XmlDisplayElement,

ReClass.NET/Util/Util.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics.Contracts;
4+
using System.Linq;
45

56
namespace ReClassNET.Util
67
{
@@ -50,5 +51,13 @@ public static void Swap<T>(ref T lhs, ref T rhs)
5051
lhs = rhs;
5152
rhs = temp;
5253
}
54+
55+
//thx again stack overflow https://stackoverflow.com/a/1344242
56+
public static string RandomString(int length)
57+
{
58+
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
59+
return new string(Enumerable.Repeat(chars, length)
60+
.Select(s => s[Program.GlobalRandom.Next(s.Length)]).ToArray());
61+
}
5362
}
5463
}

ReClass.NET/Util/WinUtil.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Diagnostics;
33
using System.Diagnostics.Contracts;
4+
using System.Security.Principal;
45
using Microsoft.Win32;
56

67
namespace ReClassNET.Util
@@ -23,6 +24,9 @@ public static class WinUtil
2324

2425
public static bool IsAtLeastWindows10 { get; }
2526

27+
//from https://stackoverflow.com/a/11660205
28+
public static bool IsAdministrator => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
29+
2630
static WinUtil()
2731
{
2832
var os = Environment.OSVersion;

0 commit comments

Comments
 (0)