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

我正在创build一个桌面小工具,并遇到问题。 该窗口将隐藏的“显示桌面”命令 – 停止,我知道你在想什么,不需要“你不应该这样做”的意见 – 我想停下来。 毕竟桌面小工具的重点在于它坚持桌面。

只是为了澄清 – 我不想要一个TopMost窗口。 我不想实际停止“显示桌面”命令,只是忽略它。 我只想让我的桌面小工具在桌面上保持可见状态,正常情况下可以中断正常的function。

有任何想法吗? 我目前的方法是在Google上find的P / Invoke片段,将表单的父项设置为Progman或其他。 问题是,这似乎强制显示在任务栏中,我不想要的窗口。

也许有一点回答你的问题,但在这里,我似乎已经找到了答案:

[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”应该在Form的构造函数中调用,最好在“InitializeComponent”之前。 至少在Win7下对我有用。