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() #上書きする
流れとしては
@ソフトが起動していれば接続。起動してなければ起動。(関数にした)
A「名前を付けて保存」ダイアログが開いてなければメニューから選択して開く。
Bファイル名をセット。
C保存ボタンを押す。
D同名のファイルがあれば上書きするか求められるダイアログが開く。
(「はい」ボタンがあるかでif文で認識させた。)
保存終了。
ポイントとしては、たまたま起動するexeファイルの頭文字が「a」だったので「\a」で
別の符号みたいに認識してしまうので「\\acad.exe」としたら回った。
これを応用していけば、メニューはクリックし放題。
できることの幅が広がった!
それは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() #上書きする
流れとしては
@ソフトが起動していれば接続。起動してなければ起動。(関数にした)
A「名前を付けて保存」ダイアログが開いてなければメニューから選択して開く。
Bファイル名をセット。
C保存ボタンを押す。
D同名のファイルがあれば上書きするか求められるダイアログが開く。
(「はい」ボタンがあるかでif文で認識させた。)
保存終了。
ポイントとしては、たまたま起動するexeファイルの頭文字が「a」だったので「\a」で
別の符号みたいに認識してしまうので「\\acad.exe」としたら回った。
これを応用していけば、メニューはクリックし放題。
できることの幅が広がった!
この記事へのトラックバックURL
https://fanblogs.jp/tb/4867695
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック
ありがとうございます!