直接在桌面上“放置” WinForm

时间:2018-10-04 21:03:59

标签: c# winforms overlay desktop

所以我想拥有类似于桌面覆盖物的东西。所以事情是我试图直接绘制到桌面墙纸上,但这会被重画,从我读到的内容来看,实际上没有什么好办法。因此,我尝试使用无文字的完全透明的WinForm,上面带有文本。

我遇到的问题是,按下 Windows + D 会隐藏该应用程序,但我没有找到防止这种情况或再次启动它的方法。我还读到将表单设置为“桌面的子级”也会引起问题。

到目前为止,我所做的是将表格的位置直接设置在桌面上方:

[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窗体,该窗体始终位于桌面的顶部,但位于其他所有窗口的下方。

1 个答案:

答案 0 :(得分:-2)

您应该运行一个线程,该线程会在短时间内(例如100毫秒)调用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);