假设我在屏幕上的0,0坐标处有一个100px到100px的空表单。它没有边框风格。有没有办法让这个位于桌面图标后面?
我认为这将涉及Progman进程,因为这包含桌面图标。但无论我尝试什么...获取窗口句柄和更改父母等,我似乎无法让窗口出现在图标后面。
有什么想法吗?
答案 0 :(得分:3)
基本上你想在桌面上绘制壁纸。桌面层次结构如下所示:
"Program Manager" Progman
"" SHELLDLL_DefView
"FolderView" SysListView32
实际绘制桌面图标的是SysListView32
,这就是你必须挂钩的东西。而且你不能只是把你的形式贴在它上面;你必须抓住WindowDC
到那个手柄并在DC上画画。
可以完成 - 已经已完成,但您将使用大量互操作。忘记使用传统的Winforms表单执行此操作。我认为我甚至没有看到它在C#中完成,尽管有人在python中做过,如果这有帮助的话。我自己不是一个python编码器,但代码非常简短易懂。
答案 1 :(得分:2)
至少对于Windows 8,这个问题有一个解决方案。我以CodeProject上的一篇文章的形式发布它,所以你可以在这里阅读它:
http://www.codeproject.com/Articles/856020/Draw-behind-Desktop-Icons-in-Windows
这适用于简单绘图,Windows窗体,wpf,directx等。该文章中提供的解决方案仅适用于Windows 8.
答案 2 :(得分:1)
Google-fu带我到这个MSDN论坛问题:
这是一篇博文,关注使用GetDesktopWindow()或处理桌面句柄的主要缺陷(根据您的其他问题:C# Position Window On Desktop)
http://blogs.msdn.com/oldnewthing/archive/2004/02/24/79212.aspx
您也不希望将GetDesktopWindow()作为hwndParent传递。如果您创建父窗口为GetDesktopWindow()的子窗口,则您的窗口现在粘贴到桌面窗口。如果你的窗口调用类似MessageBox()的东西,那么这是一个模态对话框,然后上面的规则启动,桌面被禁用,机器就是吐司。
无论如何,我怀疑它可能已经完成,但你是否应该是另一个问题。