簡體   English   中英

如何使用WPF(或互操作)恢復窗口而不使其焦點

[英]How to restore a window without giving it focus using WPF (or interop)

我需要恢復 (“取消最小化”)已經創建的WPF窗口,但當前位於頂部的窗口(不一定是WPF) 不能失去焦點或激活 我試過使用我能找到的所有WIN32功能,但無濟於事。 現在變得非常沮喪,真的很感激任何指針和提示。

顯然,只是在WPF中更改為WindowState.Normal並不會刪除它,因為這會使窗口獲得焦點和激活。 我還嘗試了在恢復時設置HiddenIsEnabled各種組合。

我已嘗試使用HWND_TOP,HWND_TOPMOST等WIN32 SetWindowPos ,但此功能不是為了恢復窗口,只會改變已經“顯示”的窗口的位置。

試過WIN32 ShowWindowSetWindowPlacement但也沒有運氣。 嘗試添加一個HwndHook嘗試監聽WM_SETFOCUS並將焦點恢復到原始窗口,但我只得到最后一個聚焦窗口句柄的零。

編輯 - 來自Joel Lucsy的小費后窗口擴展的解決方案:

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

調用ShowWindow傳遞SW_SHOWNOACTIVATE標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM