编程语言
首页 > 编程语言> > c#-如何始终保持窗口可见,但不强制其位于顶部

c#-如何始终保持窗口可见,但不强制其位于顶部

作者:互联网

我正在创建各种“桌面小工具”,我已禁用了窗口的手动最小化,但是现在存在另一个问题:例如,如果用户按下Windows D,系统仍然可以隐藏窗口.

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

也许可以使用win32 API安装全局快捷方式事件,并将TopMost短暂地设置为true,但这听起来很骇人.

我找到了一种解决方案,但在Windows 10上似乎不起作用:Keeping window visible through “Show Desktop”/Win+D
 考虑到它们的弃用,在Windows 10上不可能使用另一个通用选项,即编写实际的桌面小工具.

还有其他方法可以使窗口始终可见(但不在屏幕顶部)吗?

解决方法:

此功能对我有用:

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将窗口放置在所有其他窗口的下面.

标签:windows-10,c,winforms
来源: https://codeday.me/bug/20191027/1944322.html