当WPF XAML窗口处于最大化状态时,将另一个应用程序放到前台

本文关键字:另一个 应用程序 前台 状态 XAML WPF 窗口 最大化 | 更新日期: 2023-09-27 18:13:44

我有一个WPF应用程序,其中主窗口通过Window标记中的WindowState="Maximized"设置为全屏。在应用程序中,我通过Office互操作库打开PowerPoint,目的是在前台打开PowerPoint,在WPF应用程序之上。然而,PowerPoint并不总是占据前台(特别是在Windows 7机器上)。在这种情况下,我必须按下Windows键调出Windows任务栏,然后点击PowerPoint图标。

我尝试了一些事情,例如使用Win32 API中的SetForegroundWindow(), PowerPoint互操作库中的.Activate()函数和AutomationElement类(这里是最后一个的一些代码):

Process process = System.Diagnostics.Process.GetProcessesByName("POWERPNT").FirstOrDefault();
AutomationElement element = AutomationElement.FromHandle(process.MainWindowHandle);
if (element != null)
{
    element.SetFocus();
}

然而,这些似乎都没有把PowerPoint带到最前面。有人知道为什么会出现这种情况吗?怎样才能最好地把ppt放到前台?

当WPF XAML窗口处于最大化状态时,将另一个应用程序放到前台

        [DllImport("user32.dll")]
    public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow);
    [DllImport("user32.dll")]
    public static extern bool SetForegroundWindow(IntPtr WindowHandle);
    public const int SW_RESTORE = 9;
    static void Main(string[] args)
    {
        Process process = System.Diagnostics.Process.GetProcessesByName("POWERPNT").FirstOrDefault();
        IntPtr hWnd = IntPtr.Zero;
        hWnd = process.MainWindowHandle;
        ShowWindowAsync(new HandleRef(null, hWnd), SW_RESTORE);
        SetForegroundWindow(process.MainWindowHandle);
    }

这可能适用于您的情况:

Microsoft.VisualBasic.Interaction.AppActivate("fullTitleOfWindow_OR_firstLettersOfWindowTitle");
相关文章: