我有一个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放到前台?
答案 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");