Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejemplo Con Procesos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ejemplo Con Procesos 
 
Hola!.

He estado creando un pequeño ejemplo para ver como funciona el tema de los procesos con Shell
En este, uso el emulador M.A.M.E para listar en una caja de texto todos los clones de un juego predefinido . ( Puedo variar eso).

En caso de que el comando no exista mostrara una caja de dialogo mostrando un error.

Este es el código:

Private hProceso As Process

Public Sub btnSalir_Click()

  Me.Close

End

Public Sub btnEjecutar_Click()

hProceso = Shell "mame -listclones " & "dangar" For Read Write As "Proceso"

End

Public Sub Proceso_Error(sError As String)

  Message.Error(sError)
    
End

Public Sub Proceso_Read()
  
Dim scad As String

Line Input #Last, scad
txtSalida.Text &= scad & "\n"
  
End

Public Sub Proceso_Kill()
  
  Print "Proceso finalizado"
  
End
 


Comentaros que en la creación del manejador del proceso, logré ver que al escribir Proceso_...pude ver Error(),
pero los otros, tales como Read() o Kill() no vi que se mostrasen automáticamente. Se repetía el nombre del evento
que ya existía en el código.

En el caso de que el comando exista en el sistema muestra:

 comandoexiste

Luego en la consola muestra:

Citar:

Proceso finalizado


En el caso de que el nombre del comando no exista muestra lo siguiente:

 comandonoexiste

Y en la consola vuelve a presentar:

Citar:

Proceso finalizado


Si yo no quisiera mostrar un mensaje de error, también podría hacer uso de una variable Booleana.

¿ Qué os parece la creación de un video-tutorial ?.  
Para cuando nuestro maestro de vídeo tutoriales tenga tiempo.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 02 May 2016, 20:37; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
ehh... ¿y si antes de todo eso preguntas al sistema si reconoce el comando?

Digo un "whatis" o "which", no sé si hay algo más.

  Dim sHay As String
  Shell "whatis mame" to sHay
  'y aquí un IF comparando el sHay con la salida esperada etc y etc
 


...Sólo una idea.
 



 
vicr - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
vicr:

Citar:

ehh... ¿y si antes de todo eso preguntas al sistema si reconoce el comando?

Digo un "whatis" o "which", no sé si hay algo más.


Pues si, es una buena idea. Aunque estaba intentando hacerlo con Try. Por eso los mensajes que he comentado sobre Exec y Shell.

¿ Cuál crees que puede ser más apropiado whatis o where ?
En el caso de whatis, mediante un split  y ":" podía comprobar la cadena:

Citar:

whatis mame
mame (6)             - The Multiple Arcade Machine Emulator
 $ whatis mam
mam: nada apropiado.
which mame
/usr/games/mame
jack@centauro ~ $ which mam


Y en el caso de which si no existe devuelve aparentemente una cadena vacía.
Claro que he de presuponer que cualquier comando debe reconocerlo el sistema.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
Me he encontrado un problema en el ejemplo.

He creado una caja de texto donde inserto el nombre del juego a buscar.
De esta forma:

Public Sub btnEjecutar_Click()

hProceso = Shell "mame -listclones " & txtJuego.Text For Read Write As "Proceso"

End
 


Al pulsar el botón se le pasa el contenido de la caja de texto donde va el nombre.
Se que el juego invaders existe, pero no invader. Al ingresar el nombre de un juego que no existe
muestra en la caja de texto que no existe un juego con ese nombre, pero a la vez da error en el evento de error del proceso.

Public Sub Proceso_Error(sError As String)

  Message.Error(sError)
    
End
 

Diciendo:

"Messagebox already display."

¿ No acaba nunca el evento ?. Es como si no acabase y se ejecutase el evento más de una vez.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
El emulador cuando le dices que busque un juego y no lo encuentra te muestra posibles coincidencias.

Después de eliminar READ y WRITE de la linea de comandos. Probé esto:

hProceso = Shell "mame -listclones " & txtJuego.Text As "Proceso"
 


Cuando ingresé el nombre de un juego que no existe, me mostró en la consola una salida tal como esta:

Citar:

No matching games found for 'dang'

"dang" approximately matches the following
supported games (best match first):

dangar            Ufo Robo Dangar (12/1/1986)
dangar2           Ufo Robo Dangar (9/26/1986)
dangarb           Ufo Robo Dangar (bootleg)
dangcurv          Dangerous Curves (Ver 2.2 J)
.......


Por lo que la primera linea podría ser mostrada en un Messagebox, pero tantas no creo.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
Una posible solución es declarar una variable común/global en la que cada vez que se ejecuta el proceso de error
se va concatenando la salida a la variable.

...
Private textoError As String
....

Public Sub Proceso_Error(sError As String)

textoError &= sError      
      
End
 


Y cuando termina el proceso, si la variable tiene contenido es que ha dado algún tipo de error.

Public Sub Proceso_Kill()
  
  If textoError Then Message.Error(textoError)  
  Print "Proceso finalizado"  
  
End
 


Salida de ejemplo:

 salidaconerrores

Como el texto es un poco largo, parece no quedar bien del todo cuando lo muestra.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Procesos 
 
El código final queda de esta forma:

Private hProceso As Process
Private textoError As String

Public Sub Form_Open()
  
End

Public Sub btnSalir_Click()
  
  Me.Close
  
End

Public Sub btnEjecutar_Click()
  
  textoError = ""
  txtSalida.Clear
  hProceso = Shell "mame -listclones " & txtJuego.Text For Read Write As "Proceso"
  
End

Public Sub Proceso_Error(sError As String)
  
  textoError &= sError      
  
End

Public Sub Proceso_Read()
  
  Dim scad As String
  
  Line Input #Last, scad
  txtSalida.Text &= scad & "\n"
  
End

Public Sub Proceso_Kill()
  
  If textoError Then Message.Error(textoError)  
  Print "Proceso finalizado"  
  txtJuego.Clear
  
End
 


Se debe borrar el contenido de la caja de texto tanto la de entrada para buscar los clones, como la que los muestra.
Y también se debe eliminar el contenido de la variable que va almacenando el error. Para que solo muestre su contenido
en caso de error.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ejemplo De Un Form Informando Sobre Los Pr... shordi Aplicaciones/Fragmentos de Código 5 Domingo, 20 Marzo 2016, 21:50 Ver último mensaje
shordi
No hay nuevos mensajes A Vuelta Con El Control De Procesos shordi General 2 Viernes, 30 Julio 2010, 17:20 Ver último mensaje
shordi
No hay nuevos mensajes Control De Procesos Y Warnings shordi General 0 Martes, 01 Febrero 2011, 22:17 Ver último mensaje
shordi
No hay nuevos mensajes Procesos No Me Funcionan En Gambas 3.3.4 Shell General 2 Lunes, 24 Diciembre 2012, 01:06 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario