winforms 将WinForm直接“放置”在桌面上

eufgjt7s  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(177)

所以我想有一个类似于桌面覆盖的东西。所以事情是我试图直接绘制到桌面壁纸,但这将得到重新绘制,从我所读到的,真的没有好的方法围绕这一点。所以我试图去与broderless完全透明的WinForm与文本上。
我的问题是,点击Windows+D将隐藏应用程序,我没有找到一种方法来防止这种情况或再次提出它。此外,我读到,设置窗体作为桌面的孩子也会导致问题。
到目前为止,我所做的是将Form的位置设置在桌面的正上方:

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_NOACTIVATE = 0x0010;

//By calling SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); it will move to the very back of all windows.

我最终想要的是一个总是在桌面顶部但在每个其他窗口下的Win窗体。

jv4diomz

jv4diomz1#

你应该运行一个线程,在很短的时间内(如100ms)调用BringWindowToTop API,并将你的窗口应用程序带到顶部,它将解决Win+D问题。

[DllImport("user32.dll", SetLastError=true)]
static extern bool BringWindowToTop(IntPtr hWnd);

[DllImport("user32.dll", SetLastError=true)]
static extern bool BringWindowToTop(HandleRef hWnd);

相关问题