Sobre Gext (la librería)

miércoles, 25 de noviembre de 2009
¡Hola!

Como veis, últimamente estoy más animado para avanzar con el proyecto, aunque sólo sea pensar (porque la fase de desarrollo todavía no está oficialmente abierta). Este post va sobre la librería que comentábamos en el anterior.

Me he dado cuenta de que tanto el editor como el compilador son sólo accesorios. Lo único imprescindible es la librería. Me explico: el objetivo final será un script, generado con el compilador a partir de un proyecto creado con el editor. Pues bien, ese script se puede escribir a mano (obviamente, no quiero que eso sea siempre así, pero para probar la librería es válido). Por lo que la parte por la que empezaré será esa: gext.

Según lo tengo pensado, una de las funciones principales será la de emular el comportamiento humano, es decir, generar eventos del teclado y del ratón. Actualmente, la mayoría de los sistemas a los que va dirigida esta aplicación sólo cuenta con un dispositivo de cada tipo (si esto cambia, ya veremos :D). Por ello, intuitivamente, tendremos dos objetos, uno para el teclado y otro para el ratón (sendos singletones ;) ). Estos objetos tendrán una interfaz que permita controlar los dispositivos programáticamente. Por ejemplo, para el ratón, se debería poder mover, pulsar el botón derecho, soltarlo (con soporte para todos los botones posibles, claro :D), obtener su posición, etc. Y para el teclado idem.

Me atrevería a esbozar las interfaces aquí mismo. Veamos. La del ratón:
class Mouse:
    def getPosition(self):
        pass
 
    def moveTo(self, x, y, abs=True):
        pass

    def pressButton(self, button):
        pass

    def releaseButton(self, button):
        pass

Las argumentos x e y son enteros que indican la posición, y abs especifica si el movimiento es absoluto (desde la posición 0,0 de la ventana root), o relativo a la posición actual del ratón. Button es un entero que indica el número de botón a pulsar. Se pueden añadir algunos métodos para simplificar ciertas tareas comunes, por ejemplo, un leftClick(), o un dragTo(). La del teclado, podría ser algo así:
class Keyboard:
    def pressKey(self, key):
        pass

    def releaseKey(self, key):
        pass
De nuevo, también añadiré algunos métodos para tareas comunes. En este caso, es muy frecuente querer introducir muchos caracteres seguidos, en vez de ir uno por uno. Para ello, algo como generateKeyEvents(seq) sería útil, donde seq es una cadena de texto.

Bueno, creo que por hoy, ya tengo bastante :D . ¡Hasta el siguiente post!

0 comentarios:

Publicar un comentario