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