mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 10:46:33 +02:00
## Summary of the Pull Request Removes all C++/CX code, replacing it with C++/WinRT. ## Detailed Description of the Pull Request / Additional comments Removes all C++/CX code. Renames interop namespaces to be better consumed by CsWinRT. Standardizes all projects on net8.0-windows10.0.20348.0, which is a requirement for C++/WinRT usage. FileLocksmithLibInterop brought to stdcpplatest and static analysis errors were corrected. Removed now unneeded string conversion code from FileLocksmithLibInterop. Changed interop KeyboardHook to use a single hook across all instances. Required because on C++/WinRT we don't have the .NET runtime to bind a object instance to a delegate and be able to pass it to a C function pointer argument (still no idea why this worked correctly on C++/CX to be honest). This change actually makes us create less low level keyboard hooks. Changed some code that depended on arrays since WinRT/C++ returns null instead of an empty array through the interface. ## Validation Steps Performed Built and tested runtime.
93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using ManagedCommon;
|
|
using PowerToys.Interop;
|
|
|
|
namespace PowerAccent.UI;
|
|
|
|
internal static class Program
|
|
{
|
|
private static readonly CancellationTokenSource _tokenSource = new CancellationTokenSource();
|
|
private static App _application;
|
|
private static int _powerToysRunnerPid;
|
|
|
|
[STAThread]
|
|
public static void Main(string[] args)
|
|
{
|
|
Logger.InitializeLogger("\\QuickAccent\\Logs");
|
|
|
|
if (PowerToys.GPOWrapper.GPOWrapper.GetConfiguredQuickAccentEnabledValue() == PowerToys.GPOWrapper.GpoRuleConfigured.Disabled)
|
|
{
|
|
Logger.LogWarning("Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator.");
|
|
return;
|
|
}
|
|
|
|
Arguments(args);
|
|
|
|
InitEvents();
|
|
|
|
_application = new App();
|
|
_application.InitializeComponent();
|
|
_application.Run();
|
|
}
|
|
|
|
private static void InitEvents()
|
|
{
|
|
Task.Run(
|
|
() =>
|
|
{
|
|
EventWaitHandle eventHandle = new EventWaitHandle(false, EventResetMode.AutoReset, Constants.PowerAccentExitEvent());
|
|
if (eventHandle.WaitOne())
|
|
{
|
|
Terminate();
|
|
}
|
|
},
|
|
_tokenSource.Token);
|
|
}
|
|
|
|
private static void Arguments(string[] args)
|
|
{
|
|
if (args?.Length > 0)
|
|
{
|
|
try
|
|
{
|
|
if (int.TryParse(args[0], out _powerToysRunnerPid))
|
|
{
|
|
Logger.LogInfo($"QuickAccent started from the PowerToys Runner. Runner pid={_powerToysRunnerPid}");
|
|
|
|
RunnerHelper.WaitForPowerToysRunner(_powerToysRunnerPid, () =>
|
|
{
|
|
Logger.LogInfo("PowerToys Runner exited. Exiting QuickAccent");
|
|
Terminate();
|
|
});
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.WriteLine(ex.Message);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Logger.LogInfo($"QuickAccent started detached from PowerToys Runner.");
|
|
_powerToysRunnerPid = -1;
|
|
}
|
|
}
|
|
|
|
private static void Terminate()
|
|
{
|
|
Application.Current.Dispatcher.BeginInvoke(() =>
|
|
{
|
|
_tokenSource.Cancel();
|
|
Application.Current.Shutdown();
|
|
});
|
|
}
|
|
}
|