get app elevated property

This commit is contained in:
seraphima
2024-07-16 07:17:50 +02:00
parent 89d6aed118
commit d218e36a77
7 changed files with 46 additions and 10 deletions

View File

@@ -33,7 +33,7 @@ namespace ProjectsEditor.Data
public string CommandLineArguments { get; set; }
public bool LaunchesAsAdmin { get; set; }
public bool IsElevated { get; set; }
public bool Minimized { get; set; }

View File

@@ -49,14 +49,14 @@ namespace ProjectsEditor.Models
public string CommandLineArguments { get; set; }
private bool _launchesAsAdmin;
private bool _isElevated;
public bool LaunchesAsAdmin
public bool IsElevated
{
get => _launchesAsAdmin;
get => _isElevated;
set
{
_launchesAsAdmin = value;
_isElevated = value;
OnPropertyChanged(new PropertyChangedEventArgs(nameof(AppMainParams)));
}
}
@@ -111,7 +111,7 @@ namespace ProjectsEditor.Models
{
get
{
_appMainParams = _launchesAsAdmin ? Properties.Resources.Admin : string.Empty;
_appMainParams = _isElevated ? Properties.Resources.Admin : string.Empty;
if (!string.IsNullOrWhiteSpace(CommandLineArguments))
{
_appMainParams += (_appMainParams == string.Empty ? string.Empty : " | ") + Properties.Resources.Args + ": " + CommandLineArguments;

View File

@@ -216,7 +216,7 @@ namespace ProjectsEditor.Models
AppTitle = item.AppTitle,
CommandLineArguments = item.CommandLineArguments,
PackageFullName = item.PackageFullName,
LaunchesAsAdmin = item.LaunchesAsAdmin,
IsElevated = item.IsElevated,
Minimized = item.Minimized,
Maximized = item.Maximized,
MonitorNumber = item.MonitorNumber,

View File

@@ -152,7 +152,7 @@
Margin="100 5 0 0">
<CheckBox
Content="{x:Static props:Resources.LaunchAsAdmin}"
IsChecked="{Binding LaunchesAsAdmin, Mode=TwoWay}"
IsChecked="{Binding IsElevated, Mode=TwoWay}"
MinWidth="10"/>
<CheckBox
Margin="15 0 0 0"

View File

@@ -94,7 +94,7 @@ namespace ProjectsEditor.Utils
PackageFullName = app.PackageFullName,
Parent = newProject,
CommandLineArguments = app.CommandLineArguments,
LaunchesAsAdmin = app.LaunchesAsAdmin,
IsElevated = app.IsElevated,
Maximized = app.Maximized,
Minimized = app.Minimized,
IsNotFound = false,
@@ -149,7 +149,7 @@ namespace ProjectsEditor.Utils
Title = app.AppTitle,
PackageFullName = app.PackageFullName,
CommandLineArguments = app.CommandLineArguments,
LaunchesAsAdmin = app.LaunchesAsAdmin,
IsElevated = app.IsElevated,
Maximized = app.Maximized,
Minimized = app.Minimized,
Position = new ProjectData.ApplicationWrapper.WindowPositionWrapper

View File

@@ -147,6 +147,32 @@ namespace SnapshotUtils
return commandLineArgs;
}
bool IsProcessElevated(DWORD processID)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processID);
if (!hProcess)
{
return false;
}
HANDLE hToken = NULL;
if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken))
{
return false;
}
TOKEN_ELEVATION elevation;
DWORD cbSize = sizeof(TOKEN_ELEVATION);
if (!GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &cbSize))
{
CloseHandle(hToken);
return false;
}
CloseHandle(hToken);
return elevation.TokenIsElevated;
}
std::vector<Project::Application> GetApps(const std::function<unsigned int(HWND)> getMonitorNumberFromWindowHandle)
{
std::vector<Project::Application> apps{};
@@ -219,6 +245,7 @@ namespace SnapshotUtils
.path = processPath,
.packageFullName = data.value().packageFullName,
.commandLineArgs = L"", // GetCommandLineArgs(pid, wbemHelper),
.isElevated = IsProcessElevated(pid),
.isMinimized = WindowUtils::IsMinimized(window),
.isMaximized = WindowUtils::IsMaximized(window),
.position = Project::Application::Position{

View File

@@ -29,6 +29,7 @@ struct Project
std::wstring path;
std::wstring packageFullName;
std::wstring commandLineArgs;
bool isElevated{};
bool isMinimized{};
bool isMaximized{};
Position position{};
@@ -137,6 +138,7 @@ namespace JsonUtils
const static wchar_t* AppPackageFullNameID = L"package-full-name";
const static wchar_t* AppTitleID = L"title";
const static wchar_t* CommandLineArgsID = L"command-line-arguments";
const static wchar_t* ElevatedID = L"is-elevated";
const static wchar_t* MinimizedID = L"minimized";
const static wchar_t* MaximizedID = L"maximized";
const static wchar_t* PositionID = L"position";
@@ -151,6 +153,7 @@ namespace JsonUtils
json.SetNamedValue(NonLocalizable::AppTitleID, json::value(data.title));
json.SetNamedValue(NonLocalizable::AppPackageFullNameID, json::value(data.packageFullName));
json.SetNamedValue(NonLocalizable::CommandLineArgsID, json::value(data.commandLineArgs));
json.SetNamedValue(NonLocalizable::ElevatedID, json::value(data.isElevated));
json.SetNamedValue(NonLocalizable::MinimizedID, json::value(data.isMinimized));
json.SetNamedValue(NonLocalizable::MaximizedID, json::value(data.isMaximized));
json.SetNamedValue(NonLocalizable::PositionID, PositionJSON::ToJson(data.position));
@@ -177,6 +180,12 @@ namespace JsonUtils
}
result.commandLineArgs = json.GetNamedString(NonLocalizable::CommandLineArgsID);
if (json.HasKey(NonLocalizable::ElevatedID))
{
result.isElevated = json.GetNamedBoolean(NonLocalizable::ElevatedID);
}
result.isMaximized = json.GetNamedBoolean(NonLocalizable::MaximizedID);
result.isMinimized = json.GetNamedBoolean(NonLocalizable::MinimizedID);
result.monitor = static_cast<int>(json.GetNamedNumber(NonLocalizable::MonitorID));