我试图将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);
}
}
}
有什么好的建议吗?非常感谢。
答案 0 :(得分:1)
如何以编程方式将UWP app窗口置于最前面并在窗口最小化时将其最大化
根据您的要求,我们建议使用protocol启动uwp应用程序。例如:demoapp:full
。 demoapp
是应用程序的启动方案,而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 }))
{
}