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

rob*_*hol 5 c# windows desktop

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

只是为了澄清 - 我不想要一个TopMost窗口.我不想实际停止"显示桌面"命令,只是忽略它.我想要的只是让我的桌面小工具在桌面上保持可见,破坏正常功能.

有任何想法吗?我目前的方法是我在Google上找到的P/Invoke片段,将表单的父级设置为Progman或其他东西.问题是,这似乎迫使窗口显示在任务栏中,这是我不想要的.

小智 6

对你的问题的回答可能有点迟了,但不过在这里答案,我似乎已经找到了:

    [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);
    }
Run Code Online (Sandbox Code Playgroud)

应该在Form的构造函数中调用"MakeWin",最好在"InitializeComponent"之前调用.至少在Win7下,对我有用.