es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

pywinauto, manipula ventanas con títulos variables

Estoy tratando de escribir un script de automatización que involucra interactuar con ventanas de Windows que tienen títulos que cambian basados en los parámetros de búsqueda establecidos por el usuario. En la línea 4 y 5 del código de ejemplo utilizan app.UntitledNotepad, pero ¿qué sucede si mi script guarda el archivo y luego el título de la ventana cambia? ¿Hay alguna otra forma de interactuar con las ventanas de la aplicación además de este identificador?

(1)   >>> from pywinauto import application
(2)   >>> app = application.Application()
(3)   >>> app.start("Notepad.exe")
      <pywinauto.application.application object="" at="" 0x00ae0990="">
(4)   >>> app.UntitledNotepad.draw_outline()
(5)   >>> app.UntitledNotepad.menu_select("Edit -> Replace")

En mi código tengo:

app_log = Application(backend="uia").connect(process=appcheck.get_window_pid('Login'), timeout=10)

Entonces, aunque puedo “conectarme” a esta ventana de inicio de sesión, aún no puedo interactuar con ella a menos que escriba app_log.Login.child_window(.</pywinauto.application.application>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay otras formas de interactuar con las ventanas de la aplicación además de usar el identificador (handle). Una alternativa es utilizar el método child_window y especificar el título o texto de la ventana. Por ejemplo, si el título de la ventana cambia de “Sin título – Bloc de notas” a “Mi documento – Bloc de notas” después de guardar el archivo, puedes interactuar con la ventana utilizando el siguiente código:

    app.Notepad.child_window(title="Mi documento - Bloc de notas", class_name="Notepad").draw_outline()
    app.Notepad.child_window(title="Mi documento - Bloc de notas", class_name="Notepad").menu_select("Editar -> Reemplazar")
    

    De manera similar, en tu código puedes utilizar el método child_window para interactuar con la ventana de inicio de sesión:

    app_log = Application(backend="uia").connect(process=appcheck.get_window_pid('Login'), timeout=10)
    app_log.window(title="Login").child_window(title="Nombre de usuario", control_type="Edit").set_text("nombre_de_usuario")
    app_log.window(title="Login").child_window(title="Contraseña", control_type="Edit").set_text("contraseña")
    app_log.window(title="Login").child_window(title="Iniciar sesión", control_type="Button").click()
    

    Este código primero se conecta a la ventana de inicio de sesión utilizando el ID de proceso y el tiempo de espera (timeout). Luego, utiliza el método child_window para encontrar las ventanas secundarias con títulos específicos o tipos de control (por ejemplo, Editar, Botón) e interactúa con ellas según se desee.

Comments are closed.