FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Optimizar código
Hola, buenas tardes.
Aprovecho que hay un gurú que sabe bocha de WinApi y quería preguntar lo siguiente: Tengo este código insertado en un Timer dentro de un formulario que se ejecuta como "Loading Screen" mientras se carga un emulador de fondo. Una vez que abrió el emulador el código busca el Caption del mismo y lo trae al frente y luego se cierra. Hay alguna manera de optimizar el código este o sí o sí se tiene que hacer de una manera como esta? Se pueden buscar los exe en ejecución y terminarlos directamente? Eso sería de mucha ayuda para el programa principal así puedo cerrar los emuladores al presionar ESCAPE (que ya me solucionaron como hacerlo, pero lo hago algo "Sucio" y a veces falla). Les dejo el código y muchas gracias de ante mano!!!!
|
#2
|
||||
|
||||
No termino de entender con precisión lo que pretendes. ¿Quieres abrir un proceso, esperar a que esté abierto y entonces ponerlo en primer plano y tras esto cerrar la aplicación que lo abrió?
SI es esto lo que pretendes, yo utilizaría un createprocess que esperaría que se abra, localizaría el handle de la ventana del proceso abierto para ponerlo en primer plano y luego me termino tranquilamente. Para localizar el handle de la ventana no usaría FindWindow, existe una forma mejor. Puesto que conocemos el hProcess del proceso hijo, conocemos su ProcessID. Con esto en la mano, enumeramos las ventanas hasta encontrar una que tenga ese ProcessID y nos quedamos con su Handle para ponerla en primer plano.
Saludos. |
#3
|
||||
|
||||
Cita:
Se me olvidaba esta parte. Se puede terminar cualquier proceso a lo bruto aunque no es lo más recomendable. Se hace con la API TerminateProcess, pero es mejor tratar de terminarlos enviando el mensaje WM_CLOSE a la ventana principal de la aplicación. Si te interesa como buscar y matar procesos a lo bruto te dejo esto que escribí hace unos años:
Saludos. |
#4
|
|||
|
|||
La ventana que necesito cerrar no hace más que abrirse en primer plano maximizada, de fondo tener una imagen como para tapar todo lo que sucede detrás y la idea es que una vez que se ejecute el programa emulador que deseo, esta ventana se cierre, ya que todo esto lo ejecuto desde un archivo .bat que te describo acá abajo:
@echo START set HOME="\RetroLife\emulators\retroarch" START "LAUNCHIMG" /B /D "\RetroLife" "FrmClose.exe" %2 START "RUN-EMU" /W /B /D "\RetroLife\emulators\retroarch" "retroarch.exe" -L "\RetroLife\emulators\retroarch\cores\%3_libretro.dll" --config "\RetroLife\emulators\retroarch\config\retroarch.cfg" --appendconfig "\RetroLife\emulators\retroarch\config\RetroLife-override.cfg" %1 --log-file "\RetroLife\logs\%3-Logfile.txt" -v @echo Done Lo que pasa acá es así: Estoy dentro de un frontend de emuladores (EmulationStation por si lo conoces o Recalbox, Batocera, Retropie lo usan también pero en Linux) ejecuto el bat y le paso 3 parámetros 1 - Ubicación del juegos (ROM) 2 - nombre del sistema (es acá donde carga FrmClose.exe y le paso como parámetro el segundo parámetro del BAT que le indicaría donde cargar la imagen de fondo. 3 - Nombre para que guarde el LOG de todo lo que hace el emulador y seguir sus fallos. Por lo que esa ventana que quiero cerrar no hace más que eso, mostrarse hasta que se abra el emulador. Si le pongo que esa ventana lance directamente el emulador sin usar un BAT, cuando cierro esa ventana el frontend "piensa" que ya cerré el emulador y se vuelve a mostrar, dejando el emulador corriendo y eso no sirve. Cuando cierro el emulador, el frontend debe volver a su estado maximizado, para esperar que le pase la ruta de otro juego o sistema. Tenés alguna idea de como hacer para esperar a "ver" esa ventana del emulador y ahí cerrar la ventana de la imagen? Por eso se me había ocurrido saber si el proceso se estaba ejecutando y cerrarla así nomás sin enviar ningún CLOSE. |
#5
|
||||
|
||||
El problema es que no entiendo lo que quieres decir.
No se que es "esa ventana" no a que proceso corresponde, si es del emulador, si es tu Bat o si es una aplicación tuya. Una ventana se puede cerrar pero si cierras su proceso, se acabó. No volverá a abrirse. Cuando una ventana es la ventana principal de un proceso, generalmente cerrarla supone cerrar el proceso. La consola no representa una ventana de un proceso sino un proceso sobre el que se ejecuta otro, usando la consola como sistema de interface. Cerrar la consola implica cerrar el proceso. Si quieres saber si un proceso se está ejecutando, puedes usar este código:
Puedes encontrar más información aquí y aquí. Saludos. Última edición por escafandra fecha: 02-02-2020 a las 21:03:50. |
#6
|
|||
|
|||
Es medio complicado todo esto para mi y por eso me complico al querer explicarlo.
A ver si puedo sin repetir lo que te dije antes jajajaja!! Desde el frontend de emuladores yo lanzo mi bat. En ese bat lanzo dos programas hechos por mi: En el primer programa que se ejecuta con START lanzo el FRM que muestra la imagen del emulador, esa que tiene que estar un poco abierta tapando todo, hasta que el emulador esté en ejecución. Ese emulador yo lo largo inmediatamente después de lanzar el FRM en el bat con START pero a este le pongo la opcion /W para que espere a que termine el preceso para cerrarse el bat y de esta manera el frontend no se cierre automáticamente y espere a que termine de ejecutar el emulador. Con lo que me diste de IsRunning() voy a probar de ponerlo en un Timer dentro del primer programa (el lanzador de imagen) y que espere 5 segundos para ver si se lanzo el emulador y si da TRUE que se cierre. Muchas gracias. |
#7
|
||||
|
||||
¿El frontend es un programa de consola?
¿Porque dependes de un Bat y no lo haces todo con una APP? ¿Porqué quieres una ventana para tapar? ¿Tapar que? ¿Has pensado que tu ventana "Tapadora" no tiene porqué cerrarse, que puede esconderse? Tu mecanismo es enrevesado, debes tratar de encontrar una estrategia clara, sencilla y limpia. Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Optimizar codigo | n03l | Varios | 3 | 28-11-2013 21:07:11 |
optimizar el codigo en menos lineas | darkbits | Varios | 5 | 19-07-2013 13:32:40 |
Ayuda como Optimizar Código | JerS | OOP | 3 | 24-06-2011 05:59:44 |
optimizar codigo | acrophet | Varios | 5 | 16-01-2011 23:28:39 |
Optimizar el sgte codigo | BlueSteel | Varios | 9 | 14-08-2007 22:33:24 |
|