[英]How to restore a window without giving it focus using WPF (or interop)
我需要恢復 (“取消最小化”)已經創建的WPF窗口,但當前位於頂部的窗口(不一定是WPF) 不能失去焦點或激活 。 我試過使用我能找到的所有WIN32功能,但無濟於事。 現在變得非常沮喪,真的很感激任何指針和提示。
顯然,只是在WPF中更改為WindowState.Normal
並不會刪除它,因為這會使窗口獲得焦點和激活。 我還嘗試了在恢復時設置Hidden
和IsEnabled
各種組合。
我已嘗試使用HWND_TOP,HWND_TOPMOST等WIN32 SetWindowPos
,但此功能不是為了恢復窗口,只會改變已經“顯示”的窗口的位置。
試過WIN32 ShowWindow
和SetWindowPlacement
但也沒有運氣。 嘗試添加一個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.