如何让窗口始终可见,但不强制置顶?

4

我正在创建一种“桌面小部件”,已禁用窗口的手动最小化,但现在有另一个问题:如果用户按下 Windows+D,系统仍然可以隐藏该窗口。

以这种方式隐藏时,没有触发常规的最小化/调整大小/可见性事件。我想做的事情几乎像是使用TopMost,但不强制窗口顺序。

也许可以使用win32 API安装全局快捷键事件,并简要设置TopMost为true,但这听起来非常不专业。

我找到了一种解决方案,但似乎在Windows 10上无效:通过“显示桌面”/Win+D保持窗口可见。另一个常见选项是编写实际的桌面小部件,在Windows 10中不可能,因为它们被取消支持。

是否还有其他方法可以始终使窗口可见(但不置于屏幕顶部)?


1
用户显式按下“显示我的桌面”的键命令,您如何确定他确实是想要“显示我的桌面和这个小工具”?如果他有很多这些小工具,所有这些小工具占用的屏幕空间都超出了可用空间,会发生什么? - sisve
@SimonSvensson 我已经意识到所有的可用性问题。该应用程序正在专门开发给一个特定的家庭用户,他希望它的行为方式完全符合这个要求。该用户已经在他的Windows 10机器上安装了"便签"Windows 7,并期望类似的行为。 - Kroltan
4
没问题,桌面小工具是必需品。已从Windows中删除。并且便签不再粘性,也会被最小化。希望他们支付你足够的报酬。 - Hans Passant
1个回答

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

请注意,这段代码比保持窗口在“显示桌面”/Win+D后仍可见的方法好一些,因为该窗口可以被其他窗口(与任何其他窗口一样)遮盖。使用SetParent将窗口置于所有其他窗口下方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接