pywinautoのExampleでNotePadを自動操作

UWSCには負けないぞ!!と。。。pywinautoはオープンなのでブラックボックスもないぞーと!!アピってみる。

#coding: utf-8
# -*- encoding: utf-8 -*- 

import sys, locale, codecs

enc = locale.getpreferredencoding()
sys.stdout = codecs.getwriter(enc)(sys.stdout)
sys.stdin = codecs.getreader(enc)(sys.stdin)

# GUI Application automation and testing library
# Copyright (C) 2006 Mark Mc Mahon
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation; either version 2.1
# of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
#    Free Software Foundation, Inc.,
#    59 Temple Place,
#    Suite 330,
#    Boston, MA 02111-1307 USA

"Run some automations to test things"

__revision__ = "$Revision: 214 $"

import time

from pywinauto import application
from pywinauto import tests
from pywinauto.findbestmatch import MatchError
from pywinauto import findwindows

def TestExceptions():
    "Test some things that should raise exceptions"

    # test that trying to connect_ to a non existent app fails
    try:
        app = application.Application()
        app.connect_(path = ur"No process with this please")
        assert False
    except application.ProcessNotFoundError:
        pass

    # test that trying to connect_ to a non existent app fails
    try:
        app = application.Application()
        app.start_(cmd_line = "No process with this please")
        assert False
    except application.AppStartError:
        pass

#    # try when it isn't connected
#    try:
#        app = application.Application()
#        #app.start_(ur"c:\windows\system32\notepad.exe")
#        app.Notepad.Click()
#        #assert False
#    except application.AppNotConnected:
#        pass



def GetInfo():
    app = application.Application()

    app.start_(ur"notepad.exe")

    app.Notepad.MenuSelect(u"ファイル->ページ設定")

    print "==" * 20
    print "Windows of this application:", app.windows_()

    print "The list of identifiers for the Page Setup dialog in Notepad"
    print "==" * 20
    app[u"ページ設定"].print_control_identifiers()
    print "==" * 20
    print "The list of identifiers for the 2nd Edit control in the dialog"
    app[u"ページ設定"].Edit2.print_control_identifiers()
    print "==" * 20

    app[u"ページ設定"].OK.CloseClick()
    app.Notepad.MenuSelect(u"ファイル->メモ帳の終了")



if __name__ == '__main__':
    TestExceptions()
    GetInfo()

日本語OSには同梱のexampleは対応していないので、日本語OS用に書き換えています。
処理があまりにも早いので、必要でしたら、wait(time.sleep)を入れてください。m(_ _)m
実行すると、.print_control_identifiers()がコントロールの座標や位置等も取得してきます。
詳細は、同梱されている、HowToを参照ください。