当WPF XAML窗口处于最大化

时间:2016-10-19 17:43:45

标签: c# wpf office-interop

我有一个WPF应用程序,其中主窗口通过WindowState="Maximized"标记中的Window设置为全屏。在应用程序中,我通过Office Interop库打开PowerPoint,目的是在WPF应用程序的顶部打开PowerPoint。但是,PowerPoint并不是一直在前台(特别是在Windows 7机器上)。在这些情况下,我必须按Windows键以调出Windows任务栏并单击PowerPoint图标。

我尝试了一些方法,例如使用Win32 API中的SetForegroundWindow(),PowerPoint Interop库中的.Activate()函数以及AutomationElement类(这里是一些代码)最后一个):

Process process = System.Diagnostics.Process.GetProcessesByName("POWERPNT").FirstOrDefault();
AutomationElement element = AutomationElement.FromHandle(process.MainWindowHandle);

if (element != null)
{
    element.SetFocus();
}

然而,这些似乎都不能始终将PowerPoint带到前面。有谁知道为什么这种行为正在发生以及如何最好地将PowerPoint放到前台?

2 个答案:

答案 0 :(得分:0)

        [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);
    }

和我一起工作。

答案 1 :(得分:0)

这可能适用于您的情况:

Microsoft.VisualBasic.Interaction.AppActivate("fullTitleOfWindow_OR_firstLettersOfWindowTitle");