2016-10-19 7 views
0

Windowタグでメインウィンドウがフルスクリーンに設定されたWindowState="Maximized"のWPFアプリケーションがあります。このアプリケーションでは、WPFアプリケーションの上にあるPowerPointをフォアグラウンドで開くという意図で、Office Interopライブラリを通じてPowerPointを開いています。しかし、PowerPointは一貫してフォアグラウンドに来ていません(特にWindows 7マシン)。このような場合は、Windowsのタスクバーを開き、PowerPointのアイコンをクリックするためにWindowsキーを押す必要があります。WPF XAMLウィンドウが最大化されているときに別のアプリケーションをフォアグラウンドにする

私は(ここでは最後のものをいくつかのコードがあります)などのWin32 APIからSetForegroundWindow()を使用するなど、いくつかのこと、パワーポイント相互運用ライブラリで.Activate()機能、およびAutomationElementクラスを試してみた:

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

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

しかし、これらのどれも一貫してPowerPointを前面に持っていないようです。誰もがなぜこの動作が発生しているのか、フォアグラウンドでPowerPointを取得するのが最善の理由を知っていますか?

+0

http://stackoverflow.com/questions/6228089/how-do-i-bring-an-unmanaged-application-window-to-front-and -make-it-the-active – Nathan

+0

私はその答えを見て、 'SetForegroundWindow()'関数を使用しましたが、残念ながらそれはうまくいかないようです。 'WindowState'が' Maximized'に設定されていないときに動作するようです。 – pinhead

答えて

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

は私とうまく動作します。

0

これはあなたのケースで動作することがあります。

Microsoft.VisualBasic.Interaction.AppActivate("fullTitleOfWindow_OR_firstLettersOfWindowTitle"); 
関連する問題