https://foro.gambas-es.org/viewtopic.php?f=1&t=3716
-----------------------------------
Shell
Domingo, 23 Marzo 2014, 10:36

Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
Buenos días!.

Imaginar una aplicación que se esta ejecutando y esta a la espera de ordenes. 
Esta ordenes pueden ser por ratón, teclado y ademas un script que recibe de alguna manera la aplicación.

Pudiera ser, desde una de serie de ordenes que sean para la propia aplicación, desde pulsar un botón,
hacer algo en la interfaz de esta. Pero sin pulsar una tecla o ratón en caso de que reciba el script.

Saludos


-----------------------------------
Shell
Domingo, 23 Marzo 2014, 10:44

Re: Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
Ejemplo:

Tengo un formulario con 4 botones.

Tengo que grabar la secuencia de ejecución de los botones.
Y luego se tienen que ejecutar tal como he creado la secuencia tantas veces como yo quiera.
Ese seria el script que leera la aplicación.

Saludos


-----------------------------------
Shell
Domingo, 23 Marzo 2014, 11:53

Re: Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
He creado este ejemplo. No es que sea algo estable, pero mas o menos un paso.  :-)

[code linenumbers=false syntax=gambas]
Private log_de_botones As String
Private mostrando_procesos As Boolean
Private creando_procesos As Boolean

Public Sub _new()
  
End

Public Sub Form_Open()
  
End

Public Sub botones_Click()
  
  If Not creando_procesos Or mostrando_procesos Then  
    ' Si no estamos creando una lista de procesos,mostramos
    ' los procesos cargados o lo que hace el botón
    Print " Has pulsado el boton con indice " & Last.tag  
  Else
    log_de_botones &= Last.tag & "\n"  
  Endif
  
End

Public Sub btnFin_Click()
  
  creando_procesos = False
  
End

Public Sub btnCrearProcesos_Click()
  
  creando_procesos = True 
  log_de_botones = ""
  
End

Public Sub btnCargaProcesos_Click()
  
  'Vaciamos el log de ordenes
  log_de_botones = ""    
  log_de_botones = File.Load(User.Home &/ "Temporales/ordenes.txt")
  mostrando_procesos = True 
  
End

Public Sub btnGrabaProcesos_Click()
  
  'Si la longitud de log de procesos contiene algo y no se estan creando procesos, 
  'grabamos la secuencia de botones  
  '
  'Tendreis que crear el log en algun diretorio de vuestro disco
  If log_de_botones And Not creando_procesos Then File.Save(User.Home &/ "Temporales/ordenes.txt", log_de_botones) 
  
End

Public Sub btnSalir_Click()
  
  Me.Close
  
End

Public Sub btnEjecutar_Click()
  
  Dim ordenes As String[]
  Dim comando As String
  
  ordenes = Split(log_de_botones, "\n")
  ordenes.Remove(ordenes.max)
  For Each comando In ordenes
    Last.tag = comando
    botones_Click()
  Next
  
End
[/code]

[strike]Al final se crea una orden vacía que tengo que eliminar.[/strike]

Subo el código.

No es un nombre muy sugerente. :-D


-----------------------------------
Shell
Domingo, 23 Marzo 2014, 13:00

Re: Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
Algo que tengo que mirar es:

Last.Name


-----------------------------------
jsbsan
Domingo, 23 Marzo 2014, 13:31

Re: Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
Shell:

[quote] Robot ?[/quote]
Realmente, lo que estas haciendo un bot para tu aplicación... puede ser interesente para hacer "tutoriales" de los propios programas, para enseñar lo que hace el programa, por ejemplo.

Quizás para hacer  verdaderos "scripts" para los programas, lo suyo seria crear un interprete de comandos especificos de programa, y así trabajar directamente con las funciones del programa  (y no trabajar con controles visuales (los botones, menus).

El programa de jodacame, realmente implementa su propio "interprete de comandos", fijate en el código de la subrutina Timer2:

[code linenumbers=false syntax=gambas]Public Sub Timer2_Timer()
  ' Recorrido del script
  
  Application.busy = 1
  If ListViewListaOrdenes.Available Then 'Para controlar que no estamos en el final de la lista
    Filtro = False ' Para controlar si vamos a saltar una linea
    Label11.Caption = "Ejecutando: " & ListViewListaOrdenes.Item.Key & " (" & ListViewListaOrdenes.Item.text & ")" ' Mensaje de estado
    Select Case Left$(ListViewListaOrdenes.item.Text, 4) ' Verificamos el comando que se realizara
      Case "Mous"
        funciones.ejecutar_comando("xdotool mousemove " & Replace$(Right$(ListViewListaOrdenes.item.Text, Len(ListViewListaOrdenes.item.Text) - 6), ",", " "))
      Case "Coma"
        funciones.ejecutar_comando(Right$(ListViewListaOrdenes.item.Text, Len(ListViewListaOrdenes.item.Text) - 9))
      Case "clic"
        ' Verificamos si es click derecho o izquierdo
        If Mid$(ListViewListaOrdenes.item.Text, 7, 1) = 1 Then
          funciones.ejecutar_comando("xdotool click 1")
        Else
          funciones.ejecutar_comando("xdotool click 3")
        End If
      Case "Text"
        funciones.ejecutar_comando("xdotool type '" & Right$(ListViewListaOrdenes.item.Text, Len(ListViewListaOrdenes.item.Text) - 6) & "'")
      Case "Espe"
        Sleep Val(Right$(ListViewListaOrdenes.item.Text, Len(ListViewListaOrdenes.item.Text) - 14))
      Case "Salt"
        ListViewListaOrdenes.MoveTo(Val(Right$(ListViewListaOrdenes.item.Text, Len(ListViewListaOrdenes.item.Text) - 16)))
        Filtro = True
    End Select
    
    If Filtro = False Then
      ListViewListaOrdenes.MoveNext
    End If
  Else
    Label11.Caption = "Finalizado"
    If repitevalor > 1 Then  
      repitevalor -= 1
      ListViewListaOrdenes.MoveFirst()
      Timer2.Enabled = True
    Else
      Timer2.Enabled = False
    Endif
  End If
  Application.busy = 0
  
End
[/code]

Es simple pero efectivo.
Para mejorarlo ( hacerlo más fácil de ampliar, y de rehusar ), habría que usar el patron Strategy para eleminar el Selec Case y el patrón Comand (para implementar las ordenes o comandos).

Saludos


-----------------------------------
Shell
Domingo, 23 Marzo 2014, 14:20

Re: Aplicación Con Interfaz Y Soporte De Scripts . Robot ?
-----------------------------------
Veo que es distinto.

Con algo mas de tiempo pruebo x-bot y hoy en un momento de tranquilidad veo el vídeo.

En principio mi idea era que la aplicación hiciera algo con unos pasos grabados.
Para tutoriales no esta nada mal, sobre todo la comprobación de si los
pasos son los correctos.

El interprete es mas como tu dices.

Gracias. :-)


