Home | Blog | Software | Reviews and Features | Forum | Help | Donate | About us

avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • October 26, 2016, 08:31:33 AM
  • Proudly celebrating 10 years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Author Topic: pywinauto  (Read 2104 times)


  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 1,927
    • View Profile
    • Donate to Member
« on: April 03, 2007, 01:58:35 PM »
I have just stumbled upon something so cool, that I have to post it here before I have even downloaded it! :Thmbsup: And of course it's Python related!!  :P

What is it
pywinauto is a set of python modules to automate the Microsoft Windows GUI. At it's simplest it allows you to send mouse and keyboard actions to windows dialogs and controls.


It has a syntax that is very pythonic.

How does it work
A lot is done through attribute access (__getattr__) for each class. For example when you get the attribute of an Application or Dialog object it looks for a dialog or control (respectively).

myapp.Notepad # looks for a Window/Dialog of your app that has a title 'similar'
             # to "Notepad"

myapp.PageSetup.OK # looks first for a dialog with a title like "PageSetup"
                  # then it looks for a control on that dialog with a title
                  # like "OK"
This attribute resolution is delayed (currently a hard coded amount of time) until it succeeds. So for example if you Select a menu option and then look for the resulting dialog e.g.


At the 2nd line the SaveAs dialog might not be open by the time this line is executed. So what happens is that we wait until we have a control to resolve before resolving the dialog. At that point if we can't find a SaveAs dialog with a ComboBox5 control then we wait a very short period of time and try again, this is repeated up to a maximum time (currently 1 second!)

This avoid the user having to use time.sleep or a "WaitForDialog" function.

Sit back and have a look at a little movie
Jeff Winkler has created a nice screencast of using pywinauto at ShowMeDo.


  • Coding Snacks Author
  • Charter Honorary Member
  • Joined in 2005
  • ***
  • Posts: 2,883
    • View Profile
    • Donate to Member
Re: pywinauto
« Reply #1 on: April 19, 2007, 11:35:31 AM »
Wow, that and Easygui and Python will almost replace Autohotkey! w00t!