c# - recuperar - ocultar iconos del escritorio windows 10
¿Cómo puedo manipular programáticamente las ubicaciones de los iconos del escritorio de Windows? (4)
El escritorio es solo un control ListView y puede obtener su manejador y enviarle mensajes para mover iconos usando LVM_SETITEMPOSITION.
Sin embargo, obtener posiciones de iconos usando LVMGETITEMPOS es un poco más complicado. Debe pasar un puntero a una estructura POINT como su LPARAM. Si intentas hacer eso, es probable que bloquees Explorer. El problema es que le pasó un puntero en su 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 de Explorer y enviar el mensaje desde allí. Entonces solo tienes que tener una forma de recuperar la información de posición a tu proceso.
Varios años atrás, inocentemente traté de escribir una pequeña aplicación para guardar mis íconos de escritorio colocados tácticamente porque estaba harta de arrastrarlos de vuelta a sus ubicaciones cuando algún evento los reiniciaba. Me di por vencido después de enterrar WAY demasiado tiempo al no haber encontrado una forma de consultar, y mucho menos guardar y restablecer, la posición de escritorio de mis iconos.
¿Alguien sabe dónde persiste Windows esta información y si hay una API para configurarlos?
Gracias, Richard
No tengo idea sobre la API, pero sé que Ultramon ( http://www.realtimesoft.com/ultramon/ ) tiene una función incluida para preservar la ubicación de los iconos (aunque nunca la he usado para preservar la ubicación de los iconos, es indispensable para uso de monitores múltiples). La última versión beta funciona sin problemas con Vista (excepto por tener a veces un fallo menor o dos al iniciar sesión inicialmente en mi máquina a través de RDP), y por supuesto, no he tenido ningún problema con XP. Lo he usado por más de cuatro años.
¿Y mencioné que es la mejor utilidad para el uso de monitores múltiples?
Si no me equivoco, el escritorio es solo un ListView, y tendrá que enviar el mensaje LVM_SETITEMPOSITION al identificador del escritorio.
Busqué en Google un poco de código c # y no pude encontrar un ejemplo, pero encontré el siguiente artículo. Torry: ... obtener / establecer las posiciones de los iconos de escritorio? . Es un código Delphi, pero me parece muy legible y con algunos P / Invocaciones podrás traducirlo a c #.
Todavía estoy investigando esto y publicaré el resultado una vez que finalmente tenga algo funcionando. Estoy publicando esto porque, gracias indirectamente a la publicación de Davy, también encontré una implementación clásica de VB:
Mezclar iconos de escritorio mediante la comunicación de memoria entre procesos
y esa será probablemente la base de mi código.