Files
PowerToys/src/modules/MouseUtils/MouseJumpUI/Program.cs
Michael Clayton 93d80f542c [MouseJump]Long lived background process (#28380)
* [MouseJump] Long lived background exe

* [MouseJump] Long lived background exe

* [MouseJump] Long lived background exe

* [MouseJump] Long lived background exe

* [MouseJump] Close long lived background exe when parent runner exits

* [MouseJump] Close long lived background exe when parent runner exits

* [MouseJump] long lived background exe - fixing build

* [MouseJump] - add FileSystemWatcher for config (#26703)

* Fix telemetry event
2023-10-11 15:58:19 +01:00

110 lines
3.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.IO;
using System.Reflection;
using System.Text.Json;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Threading;
using Common.UI;
using interop;
using ManagedCommon;
using Microsoft.PowerToys.Settings.UI.Library;
using MouseJumpUI.Helpers;
namespace MouseJumpUI;
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
Logger.InitializeLogger("\\MouseJump\\Logs");
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
if (PowerToys.GPOWrapper.GPOWrapper.GetConfiguredMouseJumpEnabledValue() == PowerToys.GPOWrapper.GpoRuleConfigured.Disabled)
{
// TODO : Log message
Logger.LogWarning("Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator.");
return;
}
if (Application.HighDpiMode != HighDpiMode.PerMonitorV2)
{
Logger.LogError("High dpi mode is not set to PerMonitorV2.");
return;
}
// validate command line arguments - we're expecting
// a single argument containing the runner pid
if ((args.Length != 1) || !int.TryParse(args[0], out var runnerPid))
{
var message = string.Join("\r\n", new[]
{
"Invalid command line arguments.",
"Expected usage is:",
string.Empty,
$"{Assembly.GetExecutingAssembly().GetName().Name} <RunnerPid>",
});
Logger.LogInfo(message);
throw new InvalidOperationException(message);
}
Logger.LogInfo($"Mouse Jump started from the PowerToys Runner. Runner pid={runnerPid}");
var cancellationTokenSource = new CancellationTokenSource();
RunnerHelper.WaitForPowerToysRunner(runnerPid, () =>
{
Logger.LogInfo("PowerToys Runner exited. Exiting Mouse Jump");
cancellationTokenSource.Cancel();
Application.Exit();
});
var settingsHelper = new SettingsHelper();
var mainForm = new MainForm(settingsHelper);
NativeEventWaiter.WaitForEventLoop(
Constants.MouseJumpShowPreviewEvent(),
mainForm.ShowPreview,
Dispatcher.CurrentDispatcher,
cancellationTokenSource.Token);
Application.Run();
}
private static MouseJumpSettings ReadSettings()
{
var settingsUtils = new SettingsUtils();
var settingsPath = settingsUtils.GetSettingsFilePath(MouseJumpSettings.ModuleName);
if (!File.Exists(settingsPath))
{
var scaffoldSettings = new MouseJumpSettings();
settingsUtils.SaveSettings(JsonSerializer.Serialize(scaffoldSettings), MouseJumpSettings.ModuleName);
}
var settings = new MouseJumpSettings();
try
{
settings = settingsUtils.GetSettings<MouseJumpSettings>(MouseJumpSettings.ModuleName);
}
catch (Exception ex)
{
var errorMessage = $"There was a problem reading the configuration file. Error: {ex.GetType()} {ex.Message}";
Logger.LogInfo(errorMessage);
Logger.LogDebug(errorMessage);
}
return settings;
}
}