Ver Mensaje Individual
  #7  
Antiguo 02-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Efectivamente, no nos hemos entendido, o, por mejor decir, desde luego, yo no pude entender el problema, puesto que me lanzé a bote pronto a tratar de solucionarlo y, puede leerse, lo que he propuesto no lleva a ningún sitio, como bien dices.

Voy a proponer una solución que probablemente sea un tanto chapuza. Espero que no lo sea tanto, o que, en todo caso, puedas hallar otra solución al problema y mejor que la que a continuación trataré de explicar.

Propongo que añadas al programa, además de la opción "iniciar minimizado", otra opción "iniciar con Windows".

Propongo utilizar el "truco" de nombre "Diferir el borrado de ficheros" publicado en la Web de Ian Marteens.

En dicho truco se muestra cómo conseguir que un determinado archivo sea borrado por Windows cuando este se inicie.

A ver. Si no lo he entendido todo mal, tu programa ha de iniciarse "minimizado" de todas, todas, siempre que este se inicie con Windows, incluso si el usuario tiene "desmarcada" la opción correspondiente ("iniciar minimizado").

Sería al cerrarse tu programa cuando guardaras las opciones del usuario, al menos las que nos ocupan: "iniciar minimizado" e "iniciar con Windows".

Si el usuario dejó "marcada" la opción "iniciar con Windows" también tendrías que escribir en el "Registro" la ruta de tu programa en la "clave" oportuna, pero, ya sin "parámetro" ninguno, por lo menos sin el que yo propuse más arriba. Esto lo harías también al cierre de tu programa.

Además de lo dicho, al cerrarse el programa, tendrías también que crear un archivo, un fichero, (que no tendría que contener nada, podría perfectamente estar "vacío"), en la "carpeta temporal de Windows", por ejemplo.

Además de eso, y, acto seguido, utilizarías la función que propone Ian Marteens en el "truco" mencionado antes.

Esta función dejaría al archivo "temporal" listo para ser borrado por Windows (1) al iniciarse este.

El archivo tendría que llamarse siempre igual y situarse en el mismo lugar (2), de tal manera que después pudiera comprobarse su existencia.

¿Me explico? Vayamos a lo práctico. Si el programa ha sido iniciado por Windows, porque así lo determinara la opción correspondiente, y, el usuario lo cerrara antes de cerrarse Windows, al cierre del programa se llevaría a cabo todo lo dicho: se comprobarían las opciones, se guardarían y se crearía el archivo temporal.

De este modo, y, siempre que el usuario volviera a iniciar el programa (en la misma "sesión") además de recuperar las opciones del usuario, comprobaríamos la existencia de dicho archivo temporal: de existir el archivo esto nos indicaría que el programa ya se ejecutó y fue cerrado por el usuario, que ahora vuelve a iniciarlo.

En este caso solamente iniciarías el programa "minimizado" si la opción "iniciar minimizado" estuviera "marcada" por el usuario.

En sucesivas ocasiones en que se inicie Windows, si este inicia tu programa porque así estuviera determinado en el "Registro", comprobarías, antes incluso de la opción "iniciar minimizado", la existencia del archivo temporal de que venimos hablando.

Si dicho archivo temporal no existe es que Windows acaba de iniciarse (y lo ha borrado) (3) de tal modo que tú harías que el programa se iniciara "minimizado", independientemente ya de la opción correspondiente: se inicia el programa junto a Windows, por lo tanto, el programa se inicia "minimizado" de todas, todas.

Insisto en que tal vez todo esto pueda resultar una chapuza inadmisible: empero, puede funcionar, y, o bien a alguien se le ocurre otra cosa (probablemente, yo me incluyo) o mal...

Ya comentarás si lo dicho puede servir como solución al problema, qué otros problemas plantea, o, en fin, cómo te va con la cuestión que nos ocupa.

Notas:

(1) La función que se utiliza en el "truco" "Diferir el borrado de ficheros" de Ian Marteens, y, según el propio autor declara, solamente "vale" para Windows NT, 2000, XP y/o 2003. Sin embargo, el propio autor refiere que en Windows 9x puede conseguirse "lo mismo", pero utilizando el archivo "WinIni". Sería cuestión de averiguar cómo hacerlo de este modo, siempre que fuera necesario.

(2) El nombre/la ruta del archivo temporal podría ser "aleatorio" (de lo contrario procura darle un nombre que difícilmente pueda coincidir con otro archivo que pueda haber creado otro programa). Podría tal vez, a la vez que se crea el archivo temporal (con su ruta a nuestra disposición), guardarse esta en algún lado: junto a las opciones, en el "Registro", etc., de manera que luego, cuando es menester, pueda averiguarse dónde se encuentra, esto es, pueda comprobarse su existencia.

(3) He comprobado que en Windows XP, efectivamente, funciona el "truco" "Diferir el borrado de ficheros", esto es, Windows borra al inicio el archivo/fichero que previamente se indicó. Sin embargo, esto plantea el siguiente problema, ¿lo borra antes o después de iniciar los programas que sean menester? Debería comprobarse esto, tanto en el caso de Windows NT, etc., como de Windows 9x.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-06-2005 a las 00:06:38. Razón: (corrección del texto)
Responder Con Cita