2013-04-10 6 views
7

復元する必要がありますが、現在作成されているWPFウィンドウは復元されますが、 )は、フォーカスまたはアクティブ化を失うことはできません。私は見つけ出すことができるすべてのWIN32関数を使ってみましたが、無駄です。今は本当に不満を抱いていますが、実際には何らかの指針やヒントを感謝しています。WPF(またはinterop)を使用してフォーカスを与えずにウィンドウを復元する方法

明らかに、WPFでWindowState.Normalに変更するだけで、ウィンドウがフォーカスとアクティブ化を受け取るため、ウィンドウを切り取らないことがあります。私も復元中にHiddenIsEnabledを設定して、あらゆる種類の組み合わせを試しました。

私はHWND_TOP、HWND_TOPMOSTなどでWIN32 SetWindowPosを試しましたが、この機能はウィンドウを復元するためのものではなく、すでに表示されているウィンドウの位置のみを変更します。

試しWIN32 ShowWindowSetWindowPlacementですが、そこに運がありません。ジョエルLucsyから先端の後に窓拡張子を持つソリューション - 絶望的な試み、WM_SETFOCUSをリッスンするようHwndHookを追加し、元のウィンドウにフォーカスを復元するが、私は最後にフォーカスウィンドウハンドルのためのゼロを取得する試み..

編集を試してみました:SW_SHOWNOACTIVATEフラグを渡す

public static class RestoreWindowNoActivateExtension 
{   
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool ShowWindow(IntPtr hWnd, UInt32 nCmdShow); 

    private const int SW_SHOWNOACTIVATE = 4; 

    public static void RestoreNoActivate(this Window win) 
    { 
     WindowInteropHelper winHelper = new WindowInteropHelper(win); 
     ShowWindow(winHelper.Handle, SW_SHOWNOACTIVATE); 
    } 
} 
+0

現在のコードを投稿できますか? –

+0

あなたが本当に必要と感じたらコードを投稿することができますが、別の呼び出しを使って試行を混乱させているので、それほど多くは見ていません。私はそれが動作するようになる場合何かを投稿します。 – Niclas

答えて

6

コールShowWindow

+0

私は本当にこれを達成するために私が考えることができるパラメータのすべての組み合わせを渡してみました。今私は、SetWindowPosは、ウィンドウを復元するために使用することはできませんが確信しているが、私は間違っていることを証明したい:) – Niclas

+1

ShowWindowとSW_SHOWNOACTIVATEはどうですか? –

+0

+1正解を含むように答えを編集しました。そこに元の答えを残しても問題はありません。 –

関連する問題