C # Définir la fenêtre derrière les icons du bureau

Supposons que j’ai une forme vide de 100px par 100px aux coordonnées 0,0 sur l’écran. Il n’a pas de style de frontière. Y a-t-il un moyen de le positionner derrière les icons du bureau?

Je suppose que cela impliquerait le processus Progman car c’est ce qui contient les icons du bureau. Mais peu importe ce que j’essaie … d’obtenir des poignées de fenêtre et de changer de parents, etc., je ne peux pas voir apparaître la fenêtre derrière les icons.

Des idées?

Essentiellement, vous voulez dessiner sur le papier peint du bureau. La hiérarchie du bureau ressemble à ceci:

"Program Manager" Progman "" SHELLDLL_DefView "FolderView" SysListView32 

C’est le SysListView32 qui dessine réellement les icons du bureau, de sorte que c’est ce que vous devez accrocher. Et vous ne pouvez pas simplement coller votre formulaire dessus; vous devez saisir un WindowDC pour gérer et dessiner sur le WindowDC de domaine.

Cela peut être fait – cela a été fait, mais vous allez utiliser beaucoup d’interopérabilité. Oubliez cela avec un formulaire Winforms traditionnel. Je ne pense pas que je l’ai même vu en C #, bien que quelqu’un l’ait fait en python , si cela peut vous aider. Je ne suis pas un codeur Python moi-même, mais le code est assez court et facile à comprendre.

Il y a une solution à ce problème, au moins pour Windows 8. Je l’ai postposé sous la forme d’un article sur CodeProject, vous pouvez donc lire à ce sujet ici:

http://www.codeproject.com/Articles/856020/Draw-behind-Desktop-Icons-in-Windows

Cela fonctionne pour le dessin simple, Windows Forms, Wpf, DirectX, etc. La solution présentée dans cet article est seulement pour Windows 8.

Google-fu m’a conduit à cette question du forum MSDN:

http://social.msdn.microsoft.com/Forums/en/winformsdesigner/thread/c61d0705-d9ec-436a-b0a6-6ffa0ecec0cc

Et ceci est un article de blog qui considère les principaux pièges liés à l’utilisation de GetDesktopWindow () ou au traitement du handle de bureau (selon votre autre question: Fenêtre C # Position On Desktop )

http://blogs.msdn.com/oldnewthing/archive/2004/02/24/79212.aspx

Vous ne voulez pas non plus passer GetDesktopWindow () en tant que votre hwndParent. Si vous créez une fenêtre enfant dont le parent est GetDesktopWindow (), votre fenêtre est maintenant collée à la fenêtre du bureau. Si votre fenêtre appelle alors quelque chose comme MessageBox (), eh bien, c’est une boîte de dialog modale, puis les règles ci-dessus interviennent et le bureau est désactivé et la machine est toast.

Quoi qu’il en soit, je soupçonne que cela peut probablement être fait, mais si vous le souhaitez, c’est une autre question.