// 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
{
///
/// Provides application-specific behavior to supplement the default Application class.
///
public partial class App : Application
{
///
/// Initializes a new instance of the 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().
///
public App()
{
this.InitializeComponent();
}
///
/// Invoked when the application is launched.
///
/// Details about the launch request and process.
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
}
}