復元する必要がありますが、現在作成されているWPFウィンドウは復元されますが、 )は、フォーカスまたはアクティブ化を失うことはできません。私は見つけ出すことができるすべてのWIN32関数を使ってみましたが、無駄です。今は本当に不満を抱いていますが、実際には何らかの指針やヒントを感謝しています。WPF(またはinterop)を使用してフォーカスを与えずにウィンドウを復元する方法
明らかに、WPFでWindowState.Normal
に変更するだけで、ウィンドウがフォーカスとアクティブ化を受け取るため、ウィンドウを切り取らないことがあります。私も復元中にHidden
とIsEnabled
を設定して、あらゆる種類の組み合わせを試しました。
私はHWND_TOP、HWND_TOPMOSTなどでWIN32 SetWindowPos
を試しましたが、この機能はウィンドウを復元するためのものではなく、すでに表示されているウィンドウの位置のみを変更します。
試しWIN32 ShowWindow
とSetWindowPlacement
ですが、そこに運がありません。ジョエル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);
}
}
現在のコードを投稿できますか? –
あなたが本当に必要と感じたらコードを投稿することができますが、別の呼び出しを使って試行を混乱させているので、それほど多くは見ていません。私はそれが動作するようになる場合何かを投稿します。 – Niclas