Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
La Clase Desktop Y Aplicaciones Embebidas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje La Clase Desktop Y Aplicaciones Embebidas 
 
Es una clase muy sencillita que sirve para interactuar con X11.

En la práctica gracias a los métodos de esta clase podemos acceder a aplicaciones x11, abrir archivos o urls en nuestro browser o gestor de archivos por defecto, abrir una sesión de terminal o enviar correo utilizando nuestra aplicación de correo por defecto.

La combinación de estas posibilidades con la clase embedder nos abre la posibilidad de utilizar todas estas posibilidades en nuestras aplicaciones.

Ejemplo:
Aplicación que permita integrar el escritorio dentro un contenedor de un formulario de nuestra aplicación.

1. Pintar en un formulario un control embebeder donde queremos integrado el escritorio. Llamaré EMB a ese objeto
1. Ponemos el siguiente código en la funcioón sub main
   private sub Main()
   Dim Punteros as pointer[]
   Punteros=desktop.find("*")
   emb.embed(Punteros[0])
   end sub

Esta sencilla función hará que en el especio adecuado aparezca vuestro escritorio completamente funcional.

La clase desktop
Requiere la presencia de gb.desktop.
Tiene los siguientes métodos (todos estáticos)

open
Abre una url o un archivo en la aplicación por defecto. Si es una url utilizará el browser por defecto del sistema. Si es un archivo utilizará el gestor de archivos del sistema (nautilus o el que sea).
desktop.open("http://www.google.es")
desktop.open("/home/musica/cancion.mp3")

Las url no tienen por que ser necesriamente http. Se admiten también sesiones http, ftp y https

openterminal
Inicia una sesión terminal con el usuario por defecto y la aplicación de terminal del sistema por defecto (gnome-terminal, eterm, aterm, konsole, ..., etc) en la ubicación indicada
desktop.open("/var/log")


Sendmail
Sirve para enviar un email utilizando el gestor de correo por defecto del sistema.
Desktop.sendmail( para, cc, bcc, asunto, cuerpo, adjunto)
ejemplo
Desktop.sendmail(para.text,,asunto.text,cuerpo.text,"/home/foto.jpg")


Sendkeys
envía al teclado la secuencia de pulsaciones que se desee.
Desktop.Sendkeys("hola")

También se pueden enviar teclas por su nombre si se encierran entre corchetes (la definición X11 de estas teclas se encuentra en /usr/include/X11/keysymdef.h
Desktop.SendKeys("[RETURN]")


Para enviar dos pulsaciones simultánteas utilizar las llaves { }
  
find
A mi modo de ver es la mas interesante de todas porque lo que hace es capturar los handle de las aplicaciones de X11 y podemos disponer de ellas en nuestra aplicación mediante un objeto de la clase embebeder.

Lo que hace find es devolver un array con los handlers de todas las aplicaciones X11 en uso.
Dim Punteros as pointer[] ---> crear espacio para los handlers que sean
Punteros=desktop.find(titulo,aplicacion)

Es decir podemos buscar todos aquellos cuya ventana tenga un título X o todos aquellos procesos cuya aplicación coincida con "aplicación". No es necesario poner el título o aplicación exacto porque se utilizan las claúsulas LIKE para seleccionar procesos.

Así en el caso propuesto anteriormente
Punteros=desktop.find("*") ---> busca todos los procesos cuyo título coincida con *
Punteros=desktop.find(,"*") ---> busca todos los procesos cuya aplicación coincida con *


la propiedad GRAB
Captura la pantalla y devuelve un picture con el resultado
Dim Imagen as Picture
Imagen=desktop.grab


Hay otras propiedades como resolution, charset y screensaver que aún no he probado y no se bien lo que hacen.

El objeto embebeder
Sirve para integrar aplicaciones X11 dentro de nuestra aplicación. Es un contenedor cuyo contenido es el especificado en la propiedad client

Método embed
Para iniciar el embebido de la aplicación X11 en nuestra aplicación.
Embedder.embed(handle)

Ese handle sería el devuelto por una ejecución previa de desktop.find

Método discard
Descartar el embebido actual.
Embedder.discard()


En la propiedad client podemos leer (solo lectura= el handle que el objeto embedder está utilizando.
Dim cliente as pointer
cliente=embedder.client


Se me ocurren diversas aplicaciones como por ejemplo poder integrar el software de música o por ejemplo para el proyecto moviebox poder ver las películas si se desea.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Hola,

Necesitaria incrustar una terminal en mi form (a poder ser un gnome-terminal o xterm). He creado un objeto embedder, para empezar.
Luego, y utilizando La Clase Desktop Y Aplicaciones Embebidas, 'llamar' al openterminal de gb.desktop...

Mas o menos asi?;

PUBLIC SUB Embedder1_Embed()

  desktop.openterminal("/bin/bash")

END

Pero no me tira, bueno ni de lejos...

Mi proyecto es (seria/será xD) basicamente un lanzandor de comandos en la terminal emebedida, via los menus hechos en gambas...

Que me estoy dejando?

gracias,

Tengo Gambas2.7 bajo Ubuntu 8.10,
 



 
Steve - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Gran tutorial si señor!
Esto me irá perfecto para mi proyecto, voy a hacer pruebas y a ver que encuentro.

Gracias!
 



 
langostino - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Algunas de las propiedades o métodos que describe Soplo corresponden a la versión 3 de gambas.

Para hacer lo que quieres con gambas 2.7 tienes que ejecutar la terminal que quieres, capturar su handle y añadirlo a un control embedder.

DIM puntero AS Pointer[]
DIM ipuntero AS Integer

EXEC["gnome-terminal"]

'para encontrar el handle tal vez tengas que hacer un bucle que realice
'una pequeña espera a través de la instrucción WAIT
'si no encuentra el handle aún después de realizar esperas a través de
'un bucle puede que necesites cambiar la forma en que se busca

puntero = Desktop.Find("*gnome-terminal*")

IF puntero.Count > 0 THEN
  'Podría haber otro programa de terminal abierto (u otra instancia de gnome-terminal)
  'y el handle que quieres podría no estar en la posición 0

  ipuntero = puntero[0]
  EMB.Embed(ipuntero)

ENDIF

 

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
No no. Yo he usado esas cosas en 2.7. Si alguna os da problemas pues lo miramos pero todo eso yo lo he usado.

 

Tengo hecha una aplicación que te escanea los videos que tienes en una determinada carpeta y subcarpetas y te permite pinchar una y ver la peli. Lo único que no he conseguido es dimensionar y colocar a mi gusto la ventana de la peli pero creo que es porque apenas le di importancia. Al fin y al cabo es para catalogar mis pelis y me da igual. Yo hago doble click en una peli y se abre el video. Luego maximizo y ya está.

Seguramente se puede, solo que no encontré la forma sencilla y no le dediqué mas tiempo.

Un saludo
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Soplo, en la rama 2.x de gambas no creo que hayas usado el método:

Desktop.OpenTerminal()

porque ese método sólo existe en gambas 3.

Seguramente tienes instalado gambas 2.x y gambas 2.9x, y de allí tu confusión.

Pero me corrijo de mi mensaje anterior ya que no son "algunas" cosas del post original de Soplo que corresponden a gambas 3, sino tan sólo el método OpenTerminal.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Pues lo he mirado y tienes razón. No está openterminal en 2.7.

Optimizando el código que propones me quedo de esta forma con el handle que me interesa

DIM ipuntero AS Integer
Dim Proceso as Process

Proceso=EXEC["gnome-terminal"] 'iniciar el proceso gnome terminal

ipuntero=proceso.handle 'quedarme con su handle

EMB.Embed(ipuntero) 'embeberlo

ENDIF


Y de hecho si el proceso se abre para enviarle datos se puede abrir de la siguiente forma:
Proceso=EXEC["gnome-terminal"] for write

Y luego para enviarle parámetros tratarlo como un stream
print #proceso,"string"


Los procesos están explicados aquí
La clase Process

 
 



 
última edición por soplo el Jueves, 26 Noviembre 2009, 19:47; editado 4 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
Soplo: aunque a primera vista el código que escribiste sigue un razonamiento correcto, no funcionará:

DIM ipuntero AS Integer
Dim Proceso as Process

Proceso=EXEC["gnome-terminal"] 'iniciar el proceso gnome terminal

ipuntero=proceso.handle 'quedarme con su handle

EMB.Embed(ipuntero) 'embeberlo

ENDIF
 


proceso.handle, devuelve el PID del proceso.

El método Embed está definido así:

Embed(Client AS Pointer)

Client, es el identificador de ventana XWindow de un proceso, no su PID.

Por tanto, la terminal se abriría en su propia ventana independiente y el método Embed no podría incrustarla en el control Embedder.

Obligatoriamente se debe usar el método Desktop.Find para encontrar el puntero a la ventana de la aplicación que se lanzó.

También es importante considerar algunas cuestiones que pueden arrojar errores:

  • Aún cuando se busque el título exacto de la aplicación, Find puede devolver ninguno o varios punteros por eso se asigna a un array tipo Pointer[]

  • Generalmente es seguro usar el primer elemento del array Pointer[], pero si hay otras instancias de ese programa abiertas, tú como programador debes buscar la manera de identificar el puntero correcto dentro del array Pointer[]

  • Si Find no devuelve ningún puntero, puede que sea necesaria una espera (o varias) de unos pocos milisegundos y volver a repetir la búsqueda.

  • El método Embed espera un puntero de tipo Integer, por ello debe hacerse: ipuntero = puntero[i]

  • Aunque el método Embed no genera un error si falla, puede ser necesario en una aplicación detectar si se pudo o no encontrar el puntero de la ventana del programa: IF puntero.Count > 0 THEN

 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
última edición por fabianfv el Jueves, 26 Noviembre 2009, 20:38; editado 1 vez 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
ahh es ciertoooooo

Cierto cierto

y gracias gracias
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: La Clase Desktop Y Aplicaciones Embebidas 
 
SI, favian tiene razón, ayer me estuve peleando con esto y con el PID no funciona...Hubiera estado bien pues así no tendrías que esperar para localizar al proceso.
Supongo que lo mejor será llamar al proceso y utilizar un componente Timer para localizarlo con un Desktop.Find, porque si lo haces con un bucle y la llamada al proceso no tiene éxito te puedes quedar clavado.
 



 
langostino - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ayuda Con Aplicaciones Embebidas luisrel Controles/Librerías/Componentes 0 Jueves, 25 Noviembre 2010, 05:20 Ver último mensaje
luisrel
No hay nuevos mensajes Menu De Aplicaciones (Desktop Desarrollado... hertux General 2 Jueves, 18 Agosto 2011, 16:36 Ver último mensaje
hertux
No hay nuevos mensajes Clase Up: Actualización De Tus Aplicaciones jsbsan Aplicaciones/Fragmentos de Código 1 Miercoles, 19 Octobre 2011, 21:04 Ver último mensaje
jsbsan
No hay nuevos mensajes Desktop Innova hertux General 2 Miercoles, 20 May 2015, 21:40 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 3
Ir a la página 1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
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
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron