我需要恢复("取消最小化")已经创建的WPF窗口,但当前位于顶部的窗口(不一定是WPF)不能失去焦点或激活.我试过使用我能找到的所有WIN32功能,但无济于事.现在变得非常沮丧,真的很感激任何指针和提示.
显然只是WindowState.Normal在WPF中更改并不会削减它,因为这会使窗口获得焦点和激活.我还尝试了各种与设置Hidden和IsEnabled恢复时的组合.
我已尝试SetWindowPos使用HWND_TOP,HWND_TOPMOST等WIN32 ,但此功能不是为了恢复窗口,只会改变已经"显示"的窗口的位置.
试过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);
}
}
Run Code Online (Sandbox Code Playgroud)