首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过“显示桌面”/Win+D保持窗口可见

通过“显示桌面”/Win+D保持窗口可见
EN

Stack Overflow用户
提问于 2012-04-04 18:50:02
回答 2查看 3K关注 0票数 6

我正在创建一个桌面小工具,但遇到了问题。窗口将被“显示桌面”命令隐藏-停止,我知道你在想什么,不需要“你不应该这样做”的评论-我想停止它。毕竟,桌面小工具的全部意义在于它坚持桌面。

只是想澄清一下--我不想要一个TopMost窗口。我并不想真正停止“显示桌面”命令,只是忽略它。我只想让我的桌面小工具在桌面上保持可见,像往常一样几乎不会破坏正常的功能。

有什么想法吗?我当前的方法是在Google上找到的一个P/Invoke代码片段,将表单的父级设置为Progman或其他什么。问题是,这似乎强制窗口显示在任务栏中,这是我不想要的。

EN

回答 2

Stack Overflow用户

发布于 2015-09-15 22:59:19

也许对你的问题的回答有点晚了,但我似乎已经找到了答案:

代码语言:javascript
运行
复制
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hP, IntPtr hC, string sC, string sW);

    void MakeWin()
    {
        IntPtr nWinHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null);
        nWinHandle = FindWindowEx(nWinHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
        SetParent(Handle, nWinHandle);
    }

应该在表单的构造函数中调用"MakeWin“,最好在"InitializeComponent”之前。至少在Win7下对我来说效果很好。

票数 8
EN

Stack Overflow用户

发布于 2021-03-27 22:36:32

在此基础上为WPF表单添加我的扭曲。由于WPF窗口句柄的原因,上述代码不起作用。因此,WPF (win 10)可以使用完整的代码:

代码语言:javascript
运行
复制
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hP, IntPtr hC, string sC, string sW);

void MakeWin()
{
    IntPtr nWinHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null);
    nWinHandle = FindWindowEx(nWinHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
    var interop = new WindowInteropHelper(this);
    interop.EnsureHandle();
    interop.Owner = nWinHandle;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10009623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档