mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-02-24 04:00:02 +01:00
get app elevated property
This commit is contained in:
@@ -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; }
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user