¿Cómo puedo manipular mediante programación las ubicaciones de los íconos del escritorio de Windows?

StackOverflow https://stackoverflow.com/questions/131690

Pregunta

Hace varios años, traté inocentemente de escribir una pequeña aplicación para guardar mis íconos de escritorio colocados tácticamente porque estaba cansado de arrastrarlos de nuevo a sus ubicaciones cuando algún evento los restableció. Me di por vencido después de leer demasiado tiempo y no pude encontrar una manera de consultar, mucho menos guardar y restablecer, la posición del escritorio de mis iconos.

¿Alguien sabe dónde persiste Windows esta información y si hay una API para configurarla?

Gracias, Richard

¿Fue útil?

Solución

Si no me equivoco, el escritorio es solo un ListView, y tendrás que enviar el LVM_SETITEMPOSITION en el controlador del escritorio.

Busqué un poco en Google para algún código c # y no pude encontrar un ejemplo, pero encontré el siguiente artículo. Torry: ... obtener / establecer las posiciones de los íconos del escritorio? . Es un código delphi, pero me parece muy legible y con algunos P / Invokes podrás traducirlo a c #.

Otros consejos

El escritorio es solo un control ListView y puede obtener su identificador y enviarle mensajes para mover los iconos utilizando LVM_SETITEMPOSITION.

Sin embargo, obtener posiciones de iconos usando LVMGETITEMPOS es un poco más complicado. Debe pasar un puntero a una estructura de PUNTO como su LPARAM. Si intentas hacer eso, es probable que bloquees el Explorador. El problema es que le pasaste un puntero en tu espacio de direcciones, que el control interpretó como un puntero en el espacio de direcciones del Explorador. ¡Ay!

La solución que he usado es inyectar una DLL en el proceso del Explorador y enviar el mensaje desde allí. Entonces, solo tiene que tener una forma de obtener la información de la posición en su proceso.

Todavía estoy investigando esto y publicaré el resultado una vez que finalmente consiga que algo funcione. Estoy publicando esto porque, gracias indirectamente a la publicación de Davy, también encontré una implementación clásica de VB:

Mezcla los íconos de escritorio mediante la comunicación de memoria entre procesos

y esa será probablemente la base de mi código.

No tengo idea sobre la API, pero conozco Ultramon ( http://www.realtimesoft.com / ultramon / ) tiene una función incluida para preservar la ubicación de los íconos (aunque nunca lo he usado para preservar la ubicación de los íconos, es indispensable para el uso de múltiples monitores). La última versión beta funciona a la perfección con Vista (excepto que algunas veces tengo uno o dos problemas al iniciar sesión en mi máquina a través de RDP) y, por supuesto, no he tenido ningún problema con XP. Lo he usado durante más de cuatro años.

¿Y mencioné que es la mejor utilidad para el uso de múltiples monitores?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top