![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Pongamos un caso práctico:
Arranca el windows y como en mi programa está puesto que arranque al inicio pues lo hace, y minimizado en el tray, apareciendo solo un icono al lado del reloj. Cuando le doy al icono, la ventana principal aparece, trabajo con mi programa y finalmente le doy al botón de cerrar, el programa se cierra por completo. Seguidamente, sin cerrar windows necesito volver a mi programa, pues lo que hago es ir al acceso directo en mi escritorio o a través del menú inicio de windows y lo abro. Lo normal es que se abra otra vez minimizado, pero ahora quiero que lo haga de forma normal y no minimizado, solo lo quiero minimizado cuando inicio windows o cuando lo minimizo yo mismo. A ver si ahora tengo suerte :P |
|
#2
|
||||
|
||||
|
hola...
entonces supongo que podrias hacer una de dos : 1) cuando el usuario selecciona cerrar tu programa debes colocar en el evento OnCloseQuery, alguna acción para que en vez de cerrarlo simplemente lo "minimice" tu aplicación... 2) crear una pequeña apliación que sea la que se inicie con windows y que al hacer click sobre ella en el area de los tray icons lo que haga sea arrancar la aplicación que ahora tienes, al cerrar tu aplicacion normal la que esta en el area del "reloj" seguira estando activa para cuando volver a ejectar tu aplicacion saludos... |
|
#3
|
||||
|
||||
|
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. Última edición por dec fecha: 03-06-2005 a las 00:06:38. Razón: (corrección del texto) |
|
#4
|
|||
|
|||
|
Hola, mira este artículo de delphi.about http://delphi.about.com/od/kbwinshell/l/aa121801a.htm ahí encontras todo lo que necesitas para hacer que una aplicación que se ejecute minimizada en el tray.
|
|
#5
|
||||
|
||||
|
¿No se complican demasiado?
En el registro de Windows, donde especifican que se inicie la aplicación al comenzar la sesión en lugar de simplemente poner miaplicacion.exe ponen miaplicacion.exe win Cuando la aplicación inicie, leerá el primer parámetro: ParamStr(1). Si es = 'win' sabrá que se ejecuta al iniciar Windows y correrá minimizado en la bandeja. De cualquier ora manera que inicien la aplicacíon, mientras no especifiquen este parámetro, la aplicación iniciará normal. // Saludos |
|
#6
|
||||
|
||||
|
Hola,
roman, no me creo que tú también cayeses en la "trampa" (es broma) en que he caído yo cuando propuse mi primera posible solución. El problema radica en que la aplicación ha de iniciarse siempre "minimizada" si esta se inicia con Windows. De no ser así, esto es, si es el usuario el que inicia la aplicación, entonces la misma se iniciará "minimizada" dependiendo de la opción "minimizar al iniciar", que el usuario puede establecer. Entonces, ¿estás seguro roman que lo que propones funcionaría? Uf... si fuera así qué bien, porque lo que he planteado más arriba tiene tela... ya lo he reconocido... Última edición por dec fecha: 03-06-2005 a las 00:27:47. Razón: (aclaración) |
|
#7
|
||||
|
||||
|
¿Y por qué no ha de funcionar?
Código:
Pseudo código: IF (param(1) = 'win') OR (opcion_registro = 'min') THEN IniciarMinimizada ELSE IniciarNormal ENDIF La opción del registro se establece cada vez que el usario cierra la aplicación con tal opción seleccionada. Pero aún cuando no haya sido así, el parámetro 'win' le indicará que inicie minimizada. La lectura aquí es que en lugar de complicarnos la vida buscando métodos para detectar si Windows está inciando sesión, le ayudamos un poco pasando ese parámetro. Claro está que si alguien inicia la aplicación pasando explícitamente el parámetro, se iniciará minimizada, pero no creo que sea algo para quitarnos el sueño. // Saludos |
|
#8
|
||||
|
||||
|
Hola,
Supón roman que se han escrito en el "Registro" las opciones "win" y "min". Supón que la aplicación se inicia con Windows, y, efectivamente, se comprueba la existencia del parámetro "win" y, por tanto, se inicia la aplicación "minimizada". En este caso "min" no es necesario, puesto que, como la aplicación se inició con Windows, ha de iniciarse "minimizada" de todas, todas: sin contar con la opción "min". Así es como parece requerirlo Tecnic2. Pero ahora ponte en que el usuario cierra la aplicación y ha dejado claro en las opciones que él quiere que esta no se inicie "minimizada", pero, ojo, que no se inicie "minimizada" si la vuelve a abrir él, porque, como creo y digo, si la aplicación se inicia con Windows habrá de iniciarse "minimizada", independientemente de lo que el usuario determinara. ¿Qué hacemos? ¿Borramos del registro el valor "min"? Continuando. Si el usuario vuelve a iniciar la aplicación antes de cerrarse Windows, al inicio de la misma y buscar el valor "min" este no estará, pero sí estará el valor "win", y así la aplicación se iniciará "minimizada", que es lo que el usuario no quiere... Entonces, ¿si el usuario cierra el programa y no quiere que se inicie la aplicación "minimizada" borramos el valor "min" y quitamos de la ruta del programa el parámetro "win"? Bien. En ese caso, desde luego, se conseguirá que la aplicación no inicie "minimizada", pero, ¡cuando se inicie con Windows tampoco lo hará! Y es, precisamente, el caso, que cuando se inicie con Windows la aplicación ha de hacerlo "minimizada": independientemente de los parámetros "win" y "min". La probable chapuza que se me ocurrió, tras proponer una solución similar a la tuya, roman, no tiene que estar pendiente de si se inicia la sesión en Windows. De hecho esa es otra: la propuesta solución no funcionará (se me olvidó comentarlo arriba) si el usuario cierra e inicia luego la sesión: solamente lo hará si se reinicia Windows, o se inicia, simplemente, desde un principio, esto es, luego de haberse apagado el sistema. Última edición por dec fecha: 03-06-2005 a las 01:27:59. Razón: (corrección del texto) |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|