如何以编程方式将UWP app窗口置于最前面并在窗口最小化时将其最大化

时间:2019-09-16 03:36:23

标签: c# uwp

我试图将UWP APP窗口置于最前面,并使该窗口最大化。

我尝试是否恢复了UWP APP窗口,我的代码工作正常。但是,如果将窗口最小化,则该窗口将不会显示,并且仍保持最小化状态。

我正在使用FindWindowByCaption(IntPtr.Zero, "Demo App")来获取窗口的句柄。演示应用程序是UWP APP的显示名称。

简单的代码如下:

class Program
{
        [DllImport("user32.dll")]
        static extern bool SetForegroundWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        /// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

        static void Main(string[] args)
        {
            IntPtr handle = FindWindowByCaption(IntPtr.Zero, "Demo App");

            if (handle != IntPtr.Zero)
            {
                SetForegroundWindow(handle);
                ShowWindow(handle, 3);
            }
        }
}

有什么好的建议吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

  

如何以编程方式将UWP app窗口置于最前面并在窗口最小化时将其最大化

根据您的要求,我们建议使用protocol启动uwp应用程序。例如:demoapp:fulldemoapp是应用程序的启动方案,而full是应用程序的参数。

我们可以在OnActivated方法中拦截参数,然后使用参数使应用全屏显示。

protected override void OnActivated(IActivatedEventArgs e)
{
    if (e.Kind == ActivationKind.Protocol)
    {
        Frame rootFrame = CreateRootFrame();

        if (rootFrame.Content == null)
        {
            if (!rootFrame.Navigate(typeof(MainPage)))
            {
                throw new Exception("Failed to create initial page");
            }
        }
        var arg = e as ProtocolActivatedEventArgs;
        if (arg.Uri.LocalPath == "full")
        {
             var view = ApplicationView.GetForCurrentView();
             if (view.TryResizeView(new Size { Width = 600, Height = 600 }))
             {

             }
        }

        var p = rootFrame.Content as MainPage;
        p.NavigateToPageWithParameter(3, e);

        // Ensure the current window is active
        Window.Current.Activate();
    }
}

更新

您可以使用TryResizeView调整窗口大小

var view = ApplicationView.GetForCurrentView();
if (view.TryResizeView(new Size { Width = 600, Height = 600 }))
{

}