如何让窗口始终保持可见,但不要强迫它在顶部

时间:2016-01-27 18:18:19

标签: c# winforms windows-10

我正在创建各种各样的“桌面小工具”,我已禁用手动最小化窗口,但现在还有另一个问题:如果用户按 Windows + D

当以这种方式隐藏时,不会触发通常的最小化/调整大小/可见性事件。 我想做一些几乎像TopMost的事情,但不强迫窗口顺序。

也许可以使用win32 API安装全局快捷方式事件,并简要地将TopMost设置为true,但这听起来非常糟糕。

我找到了一个解决方案,但它似乎无法在Windows 10上运行:Keeping window visible through "Show Desktop"/Win+D  另一个常见选项是编写一个实际的桌面小工具,在Windows 10上是不可能的,因为它们已被弃用。

是否有其他方法可以随时保持窗口可见(但不在屏幕顶部)?

1 个答案:

答案 0 :(得分:4)

此功能对我有用:

BOOL FixShowDesktop(HWND hWnd)
{
    HWND hWndTmp = FindWindowEx(NULL, NULL, L"Progman", NULL);
    if (hWndTmp)
    {
        hWndTmp = FindWindowEx(hWndTmp, NULL, L"SHELLDLL_DefView", NULL);
        if (hWndTmp)
        {
            SetWindowLongPtr(hWnd, -8, (LONG_PTR)hWndTmp);
            return TRUE;
        }
    }
    return FALSE;
}

请注意,此代码比Keeping window visible through "Show Desktop"/Win+D好一点,因为窗口可能会被其他窗口溢出(就像任何其他窗口一样)。在所有其他窗口下使用SetParent窗口。