所以我想拥有类似于桌面覆盖物的东西。所以事情是我试图直接绘制到桌面墙纸上,但这会被重画,从我读到的内容来看,实际上没有什么好办法。因此,我尝试使用无文字的完全透明的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窗体,该窗体始终位于桌面的顶部,但位于其他所有窗口的下方。
答案 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);