diff --git a/src/core/Microsoft.PowerToys.Settings.UI/App.xaml.cs b/src/core/Microsoft.PowerToys.Settings.UI/App.xaml.cs index 1e164841ce..c6692b02b9 100644 --- a/src/core/Microsoft.PowerToys.Settings.UI/App.xaml.cs +++ b/src/core/Microsoft.PowerToys.Settings.UI/App.xaml.cs @@ -2,15 +2,55 @@ // 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.Runtime.InteropServices; using Microsoft.Toolkit.Win32.UI.XamlHost; namespace Microsoft.PowerToys.Settings.UI { + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")] + internal interface ICoreWindowInterop + { + System.IntPtr WindowHandle { get; } + + void MessageHandled(bool value); + } + + internal static class Interop + { + public static ICoreWindowInterop GetInterop(this Windows.UI.Core.CoreWindow @this) + { + var unkIntPtr = Marshal.GetIUnknownForObject(@this); + try + { + var interopObj = Marshal.GetTypedObjectForIUnknown(unkIntPtr, typeof(ICoreWindowInterop)) as ICoreWindowInterop; + return interopObj; + } + finally + { + Marshal.Release(unkIntPtr); + unkIntPtr = System.IntPtr.Zero; + } + } + + + [DllImport("user32.dll")] + public static extern bool ShowWindow(System.IntPtr hWnd, int nCmdShow); + + public const int SW_HIDE = 0; + } + public sealed partial class App : XamlApplication { public App() { Initialize(); + + // Hide the Xaml Island window + var coreWindow = Windows.UI.Core.CoreWindow.GetForCurrentThread(); + var coreWindowInterop = Interop.GetInterop(coreWindow); + Interop.ShowWindow(coreWindowInterop.WindowHandle, Interop.SW_HIDE); } } } diff --git a/src/modules/launcher/PowerLauncher.UI/App.xaml.cs b/src/modules/launcher/PowerLauncher.UI/App.xaml.cs index 3e96413d1d..ab255f19f1 100644 --- a/src/modules/launcher/PowerLauncher.UI/App.xaml.cs +++ b/src/modules/launcher/PowerLauncher.UI/App.xaml.cs @@ -1,10 +1,51 @@ -namespace PowerLauncher.UI +using System.Runtime.InteropServices; + +namespace PowerLauncher.UI { + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")] + internal interface ICoreWindowInterop + { + System.IntPtr WindowHandle { get; } + + void MessageHandled(bool value); + } + + internal static class Interop + { + public static ICoreWindowInterop GetInterop(this Windows.UI.Core.CoreWindow @this) + { + var unkIntPtr = Marshal.GetIUnknownForObject(@this); + try + { + var interopObj = Marshal.GetTypedObjectForIUnknown(unkIntPtr, typeof(ICoreWindowInterop)) as ICoreWindowInterop; + return interopObj; + } + finally + { + Marshal.Release(unkIntPtr); + unkIntPtr = System.IntPtr.Zero; + } + } + + + [DllImport("user32.dll")] + public static extern bool ShowWindow(System.IntPtr hWnd, int nCmdShow); + + public const int SW_HIDE = 0; + } + public sealed partial class App : Microsoft.Toolkit.Win32.UI.XamlHost.XamlApplication { public App() { this.Initialize(); + + // Hide the Xaml Island window + var coreWindow = Windows.UI.Core.CoreWindow.GetForCurrentThread(); + var coreWindowInterop = Interop.GetInterop(coreWindow); + Interop.ShowWindow(coreWindowInterop.WindowHandle, Interop.SW_HIDE); } } } \ No newline at end of file