Automatización de Tareas con Python y la librería win32

Creación de un Software de Automatización de Tareas.

 
Automatización de Tareas con python y win32

Hola amigos de Mi Diario Python, les doy nuevamente las bienvenidas a nuestra bonita comunidad. Mi nombre es Luis y como siempre es un placer estar escribiendo esto para todos ustedes.

En el articulo de hoy, tocaremos un tema cuya importancia en el área de la programación es mucha. La Programación Orientada a Objetos.

Mi objetivo en este articulo es guiarlos y mostrarles los pasos para crear un pequeño software que nos permita automatizar funciones de nuestro ordenador. Con esto me refiero a que podremos realizar un script el cual pueda mover el mouse por si solo. También crearemos funciones para el teclado. ¿Que te parece?.

Todos sabemos que existen muchas librerías que realizan estas funciones. Pero realizar el nuestro, nos ayudara a fortalecer nuestro conocimientos, y por supuesto, no hay nada más satisfactorio que utilizar nuestras propias herramientas.

Antes de comenzar quisiera aclarar algunas cosas: Lo primero es que los pasos y funciones que realizaremos hoy estarán orientadas a usuario que utilizan Windows, esto se debe a que haremos uso de la librería "win32", la cual nos permite interactuar con el sistema operativo. Otra cosa quiero aclarar, es que en este articulo no profundizare muchos en los detalles de la Programación Orientada a Objeto ni a principios básicos del Lenguaje Python ya que en este blog tenemos muy buenos artículos para Aprender Python, así que te sugiero que le eches un vistazo.

Índice

    Win32

    Win32 es una librería para Python que nos permite interactuar y manipular funciones de sistema operativo Windows. Tiene muchos métodos y funciones que debes conocer. Win32 tiene funciones para manipular archivos, conexiones de redes, seguridad del sistema y muchas otras más.

    Puedes adquirir win32 ingresando al siguiente enlace: https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/.

    También puedes utilizar el siguiente comando: pip install pypiwin32

    Win32 sera el único recurso externo que utilizaremos el día de hoy. Win32 tiene un modulo llamado "Win32api", el cual tiene una gran variedad de funciones y métodos, desde obtener la fecha local del equipo, hasta definir variables de entorno. Esta librería nos permite conocer a fondo el equipo en el que se trabaja, incluyendo conocer la posición del cursor, definir su posición y saber el estado del teclado. Así que por esta razón la utilizaremos para realizar el proyecto de hoy.

    WindowsBot

    WindowsBot sera el nombre del proyecto ¿Que les parece?.

    Perfecto, ya podemos empezar con el proyecto. Lo primero que haremos sera abrir nuestro editor de texto preferido y crear un nuevo archivo. Yo trabajare de la siguiente manera: Creare una carpeta llamada WindowsBot y en ella creare un nuevo directorio llamado "winbot", en este directorio escribiré los archivos de nuestro nuevo modulo. Así que yo trabajaré en "WindowsBot/winbot", es aquí en donde escribiremos nuestras clases y métodos, luego podremos crear scripts de prueba que importen los archivos de este directorio.

    No se si me explique bien, pero si tienes alguna duda sabes que puedes dejar tu comentario.

    Muy bien, si tienen experiencia con lo de la Programación Orientada a Objetos sabrán que si un modulo sin el archivo "init.py" no es un modulo. ¿Que es el archivo "init"? Este script, se ejecutara cada vez que el modulo sea importado desde un script, así que pueden verlo como una función que se ejecutara cada vez que se use "import winbot" en un script de python.

    # winbot/__init__.py print("Modulo importado exitosamente")

    Modulo importado exitosamente

    Por ahora, dejaremos al archivo "init.py" con una simple función print, luego volveremos a este archivo.

    Este archivo especial, nunca puede faltar en la creación de un modulo, podrías dejarlo vacío y 

    todo iría bien, pero siempre debe de haber un archivo "init.py" en el lugar de trabajo.

    Lo que haremos ahora sera crear el archivo "windows.py". En el escribiremos las clases

     y métodos que les permitirán manipular las funciones del cursor y el teclado del ordenador a 

    cualquiera que importe este modulo:

     
    # winbot/windows.py
    
    # Comencemos importanod las librerias necesarias
    # Lo modulos win32 nos permitiran interactuar con el Sistema Operativo
    import win32api
    import win32con
    
    class MouseBot():
        """
        Definimos la clase principal, en mi caso la he llamado MosueBot. En ella escribiremos los metodos
        para la manipulación del cursor.
        """
        
        
        """ 
        Definimos el metodo __init__ el cual tiene el mismo proposito que el archivo __init__.py.
        Es recomendable siempre definir este metodo, aunque este vacio.
        
        """
        def __init__(self):
            # __init__ se llamara la crearse una instancia de la clase MouseBot
            print("MouseBot se ha inicializado con exito")
            
        def getPosition(self):
            """
            El metodo getPosition retornara la posición actual del cursor.
            Para ello utilizaremos la función GetCursorPos de win32api.
            """
            pos = win32api.GetCursorPos()
            return pos
    
        
        def move(self, x, y):
            """
            El metodo move cambiara la posición del cursor con respecto asu eje x e y.
            """
            NewPos = [x, y]
            win32api.SetCursorPos(NewPos) # Como pueden observar la nueva posicion se debe entregar en una lista
            
        def click(self, button):
            """
            El valor de "button" dependera de que boton del mouse quieres que se accione.
            1 = Boton Izquierdo
            2 = Boton Derecho
            
            Vemos que utilizamos el metodo getPosition para decirle en que posición el mouse hara click.
            En este caso, sera en la posición en la que se encuantre el cursor
            """
            clickAction = 2 ** ((2 * button) - 1)
            x = self.getPosition()[0] 
            y = self.getPosition()[1]
            win32api.mouse_event(clickAction, x, y)
            
        def scroll(self, vertical=None, horizontal=None):
            """
            El metodo scrool le dara funcionamiento al scroll del mouse.
            Como pueden apreciar recibe dos argumento: vertical para que el scroll suba o baje.
            horizontal para que se mueva hacia los lados.
            """
            if horizontal is not None:
                horizontal = int(horizontal)
                if horizontal == 0:  # Si horizontal es igual a 0 no pasara nada
                    pass
                elif horizontal > 0:  # Scroll hacia la derecha si es positivo
                    for _ in range(horizontal):
                        win32api.mouse_event(0x01000, 0, 0, 120, 0)
                else:  # Scroll hacia la izquierda si es negativo
                    for _ in range(abs(horizontal)):
                        win32api.mouse_event(0x01000, 0, 0, -120, 0)
            
            if vertical is not None:
                vertical = int(vertical)
                if vertical == 0: # Si vertical tiene valor de 0 no pasara nada
                    pass
                elif vertical > 0:  # Scroll sube si es positivo
                    for _ in range(vertical):
                        win32api.mouse_event(0x0800, 0, 0, 120, 0)
                else:  # Scroll baja si es negativo
                    for _ in range(abs(vertical)):
                        win32api.mouse_event(0x0800, 0, 0, -120, 0)

    Bueno, hemos declarado muchos métodos no les parece?. Que tal si probamos el funcionamiento de 

    los métodos previamente definidos?.

    Pero antes, quiero mostrarles una cosa, para ello dirijámonos a el archivo "init.py".

    # winbot/__init__.py
    
    print("Modulo importado exitosamente")
    
    # Le indicamos que al moemnto de importar el modulo winbot, queremos que se importe la clase MouseBot de windows.py
    # Esto nos evitara tener que escribir el nombre del archivo "windows.py" cada vez que utilizemos la clase MouseBot
    from .windows import MouseBot
    

    Modulo importado exitosamente

    Lo que haré sera salir de la carpeta winbot y crear el archivo "winbot_test.py" en el cual probare 
    las funciones de la clase MouseBot.
    # winbot_test.py
    
    import winbot

    Modulo importado exitosamente

    Muy bien, como pueden observar, al importar el modulo "winbot" se nos muestra el mensaje escritos 

    anteriormente. No siempre importas un modulo y te aparece un mensaje así, No es cierto?.

    # winbot_test.py
    
    import winbot
    
    bot = winbot.MouseBot()
    
    print(dir(bot))
    
    poscursor = bot.getPosition() # posición del cursor
    bot.move(145,43) # mover El cursro
    bot.click(1) # Hacer Click en el boton izquierdo del mouse
    bot.scroll(vertical=-10)
    MouseBot se ha inicializado con exito
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'click', 'getPosition', 'move', 'scroll']
     

    Como pueden observar, se nos muestra un mensaje indicándonos que la clase MouseBot se ha inicializado con éxito. Luego se nos muestran los métodos que posee nuestra clase. Por desgracia no puedo mostrarles lo que la clase es capaz de hacer, pero ustedes mismos pueden realizar este proyecto y ver el resultado directamente desde tu computador.

    Bueno, creo que dejare el articulo hasta aquí y lo finalizaremos luego.

    Puedes ver mejor los códigos realizados el día de hoy ingresando al siguiente enlace: https://github.com/LuisAlejandroSalcedo/Creaci-n-de-un-Software-de-Automatizaci-n-de-Tareas.

    ¿Crees que le hace falta lago al modulo? ¿Que le cambiarías? Quiero que me dejes tu comentario dándonos tu opinión.

    No te pierdas el próximo articulo en el cual acabaremos el proyecto.

    Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Te has suscrito correctamente al boletín

    Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

    Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.