mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 03:07:56 +01:00
* WIP Hosts - remove deps * Add consumer app * Move App and MainWindow to Consumer app. Make Hosts dll * Try consume it * Fix errors * Make it work with custom build targets * Dependency injection Refactor Explicit page creation Wire missing dependencies * Fix installer * Remove unneeded stuff * Fix build again * Extract UI and logic from MainWindow to RegistryPreviewMainPage * Convert to lib Change namespace to RegistryPreviewUILib Remove PT deps * Add exe app and move App.xaml and MainWindow.xaml * Consume the lib * Update Hosts package creation * Fix RegistryPreview package creation * Rename RegistryPreviewUI back to RegistryPreview * Back to consuming lib * Ship icons and assets in nuget packages * Rename to EnvironmentVariablesUILib and convert to lib * Add app and consume * Telemetry * GPO * nuget * Rename HostsPackageConsumer to Hosts and Hosts lib to HostsUILib * Assets cleanup * nuget struct * v0 * assets * [Hosts] Re-add AppList to Lib Assets, [RegPrev] Copy lib assets to out dir * Sign UI dlls * Revert WinUIEx bump * Cleanup * Align deps * version exception dll * Fix RegistryPreview crashes * XAML format * XAML format 2 * Pack .pri files in lib/ dir --------- Co-authored-by: Darshak Bhatti <dabhatti@microsoft.com>
107 lines
4.5 KiB
C#
107 lines
4.5 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.Web;
|
|
using Microsoft.UI.Xaml;
|
|
using Microsoft.Windows.AppLifecycle;
|
|
using Windows.ApplicationModel.Activation;
|
|
|
|
// To learn more about WinUI, the WinUI project structure,
|
|
// and more about our project templates, see: http://aka.ms/winui-project-info.
|
|
namespace RegistryPreview
|
|
{
|
|
/// <summary>
|
|
/// Provides application-specific behavior to supplement the default Application class.
|
|
/// </summary>
|
|
public partial class App : Application
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="App"/> class.
|
|
/// Initializes the singleton application object. This is the first line of authored code
|
|
/// executed, and as such is the logical equivalent of main() or WinMain().
|
|
/// </summary>
|
|
public App()
|
|
{
|
|
this.InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invoked when the application is launched.
|
|
/// </summary>
|
|
/// <param name="args">Details about the launch request and process.</param>
|
|
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
|
|
{
|
|
// Keeping commented out but this is invaluable for protocol activation testing.
|
|
// #if DEBUG
|
|
// System.Diagnostics.Debugger.Launch();
|
|
// #endif
|
|
|
|
// Open With... handler - gets activation arguments if they are available.
|
|
AppActivationArguments activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
|
|
if (activatedArgs.Kind == ExtendedActivationKind.File)
|
|
{
|
|
// Covers the double click exe scenario and treated as no file loaded
|
|
AppFilename = string.Empty;
|
|
if (activatedArgs.Data != null)
|
|
{
|
|
IFileActivatedEventArgs eventArgs = (IFileActivatedEventArgs)activatedArgs.Data;
|
|
if (eventArgs.Files.Count > 0)
|
|
{
|
|
AppFilename = eventArgs.Files[0].Path;
|
|
}
|
|
}
|
|
}
|
|
else if (activatedArgs.Kind == ExtendedActivationKind.Protocol)
|
|
{
|
|
// When the app is the default handler for REG files and the filename has non-ASCII characters, the app gets activated by Protocol
|
|
AppFilename = string.Empty;
|
|
if (activatedArgs.Data != null)
|
|
{
|
|
IProtocolActivatedEventArgs eventArgs = (IProtocolActivatedEventArgs)activatedArgs.Data;
|
|
if (eventArgs.Uri.AbsoluteUri.Length > 0)
|
|
{
|
|
AppFilename = eventArgs.Uri.Query.Replace("?ContractId=Windows.File&Verb=open&File=", string.Empty);
|
|
AppFilename = HttpUtility.UrlDecode(AppFilename);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Right click on a REG file and selected Preview
|
|
// Grab the command line parameters directly from the Environment since this is expected to be run
|
|
// via Context Menu of a REG file.
|
|
string[] cmdArgs = Environment.GetCommandLineArgs();
|
|
if (cmdArgs == null)
|
|
{
|
|
// Covers the double click exe scenario and treated as no file loaded
|
|
AppFilename = string.Empty;
|
|
}
|
|
else if (cmdArgs.Length == 2)
|
|
{
|
|
// GetCommandLineArgs() send in the called EXE as 0 and the selected filename as 1
|
|
AppFilename = cmdArgs[1];
|
|
}
|
|
else
|
|
{
|
|
// Anything else should be treated as no file loaded
|
|
AppFilename = string.Empty;
|
|
}
|
|
}
|
|
|
|
// Start the application
|
|
appWindow = new MainWindow();
|
|
appWindow.Activate();
|
|
}
|
|
|
|
private Window appWindow;
|
|
|
|
#pragma warning disable SA1401 // Fields should be private
|
|
#pragma warning disable CA2211 // Non-constant fields should not be visible. TODO: consider making it a property
|
|
public static string AppFilename;
|
|
#pragma warning restore CA2211 // Non-constant fields should not be visible
|
|
#pragma warning restore SA1401 // Fields should be private
|
|
}
|
|
}
|