広告

posted by fanblog

2016年03月20日

pywinautoでGUIのメニューをクリック

pywinautoで何がやりたいか。
それはWINDOWSのGUIのメニュー操作。

半年前はExcelのVBAのwin32API関数でやろうとしたが、
途中で挫折した。
メニューバーに並んでいる「ファイル」とか「編集」とか
のハンドルの取得まではできたが、
その先の「名前を付けて保存」とかまで行くのに上手くいかなかった。
結局メニューのクリックはできずに終わった。。。力不足。

それでpythonのpywinautoに目を付けた。
そしてやっと、試行錯誤の上、CADソフトのメニューを自動操作して
名前を付けて保存に成功した。
以下はそのコード。
環境は
PC:windows10(64bit)
python3.4 (64bit)
pywinauto0.5.4
(操作してるソフトは32bit)

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

def test(app1,pass1):
try:
app1.Connect(path = pass1)
except:
app1.Start(cmd_line = pass1)


if __name__ == "__main__":
import pywinauto
from pywinauto.application import Application

#アプリ起動
app = Application()
pass1 = u"C:\Program Files (x86)\AutoCAD 2007\\acad.exe"
test(app,pass1)

dialog = app[u".*名前を付けて保存.*"]
if dialog.Exists() == False:
pwin = app.window_(title_re = "AutoCAD.*")
MenuItms = pwin.MenuSelect("ファイル->名前を付けて保存")

# ファイル名を設定
dialog.Edit1.SetText(u"test01.dwg")

# 保存ボタンをクリック
dialog_button1 = dialog[u'保存(&S)']
dialog_button1.Click()
# 上手くクリックを認識しなかった時用に再クリック
if dialog_button1.Exists():
dialog_button1.Click()

# 同名のファイルが存在した場合(上書きする)
confirm = app[u".*名前を付けて保存.*"]
confirm_button1 = confirm[u'はい(&Y)']

if confirm_button1.Exists():
confirm_button1.Click() #上書きする

名前を付けて保存3.JPG

名前を付けて保存4.JPG

流れとしては
@ソフトが起動していれば接続。起動してなければ起動。(関数にした)
A「名前を付けて保存」ダイアログが開いてなければメニューから選択して開く。
Bファイル名をセット。
C保存ボタンを押す。
D同名のファイルがあれば上書きするか求められるダイアログが開く。
 (「はい」ボタンがあるかでif文で認識させた。)
保存終了。

ポイントとしては、たまたま起動するexeファイルの頭文字が「a」だったので「\a」で
別の符号みたいに認識してしまうので「\\acad.exe」としたら回った。

これを応用していけば、メニューはクリックし放題。
できることの幅が広がった!
posted by iyoder at 17:56 | Comment(1) | TrackBack(0) | プログラム
この記事へのコメント
pythonでIEを用いたファイルダウンロードで困っていたのでとても参考になりました!
ありがとうございます!
Posted by ななし at 2017年01月01日 22:42
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
http://fanblogs.jp/tb/4867695
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
最新記事
<< 2018年12月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
カテゴリーアーカイブ
ファン
プロフィール
最新コメント
×

この広告は30日以上新しい記事の更新がないブログに表示されております。