Question

Il y a plusieurs années, j’ai innocemment essayé d’écrire une petite application pour enregistrer les icônes de mon bureau placées de manière tactique, car j’avais marre de les ramener à leur emplacement lorsque certains événements les réinitialisaient. J'ai abandonné après avoir passé trop de temps à WAY, n'ayant pas réussi à trouver un moyen d'interroger, encore moins de sauvegarder et de réinitialiser, la position de bureau de mes icônes.

Quelqu'un sait-il où Windows conserve ces informations et s'il existe une API pour les définir?

Merci, Richard

Était-ce utile?

La solution

Si je ne me trompe pas, le bureau est simplement une liste, et vous devrez envoyer le LVM_SETITEMPOSITION dans le descripteur du bureau.

J'ai cherché un peu de code c # dans Google et je n’ai pas pu trouver d’exemple, mais j’ai trouvé l’article suivant. Torry: ... obtenir / définir les positions des icônes du bureau? . C'est du code delphi, mais je le trouve très lisible et avec certains P / Invokes, vous pourrez le traduire en c #.

Autres conseils

Le bureau est simplement un contrôle ListView. Vous pouvez obtenir son handle et lui envoyer des messages pour déplacer les icônes à l'aide de LVM_SETITEMPOSITION.

Obtenir des positions d’icône avec LVMGETITEMPOS est cependant un peu plus compliqué. Vous devez passer un pointeur sur une structure POINT en tant que votre LPARAM. Si vous essayez de faire cela, vous allez probablement faire planter Explorer. Le problème est que vous lui avez passé un pointeur dans votre espace d'adressage, que le contrôle a interprété comme un pointeur dans l'espace d'adressage de l'Explorateur. Aïe!

La solution que j'ai utilisée consiste à injecter une DLL dans le processus Explorer et à envoyer le message à partir de là. Ensuite, vous devez juste avoir un moyen de récupérer les informations de position dans votre processus.

Je suis toujours à la recherche de cela et je publierai le résultat une fois que quelque chose fonctionne. Je publie cela parce que, indirectement grâce au message de Davy, j'ai également trouvé une implémentation classique de VB:

Lecture aléatoire des icônes du bureau à l'aide de la communication en mémoire entre processus

et ce sera probablement la base de mon code.

Je n'ai aucune idée de l'API, mais je connais Ultramon ( http://www.realtimesoft.com / ultramon / ) inclut une fonctionnalité permettant de préserver le placement des icônes (bien que je ne l'ait jamais utilisé pour préserver l'emplacement des icônes, elle est indispensable pour l'utilisation de plusieurs moniteurs). La dernière version bêta fonctionne parfaitement avec Vista (sauf parfois avec un problème mineur ou deux lors de la connexion initiale à ma machine via RDP), et bien sûr, n’a eu aucun problème avec XP. Je l'utilise depuis plus de quatre ans maintenant.

Et ai-je mentionné qu'il s'agissait du meilleur utilitaire pour utiliser plusieurs moniteurs?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top