pywinauto for python で AutoCADを操作し、DWGをDXFへ変換 - end0tknr's kipple - web写経開発
上記 entryのvisio版です
#!/usr/local/python3/bin/python3 # -*- coding: utf-8 -*- import glob import os import pywinauto import time import subprocess import psutil def main(): visio_paths = glob.glob( "VISIO/**/*", recursive=True) for i, visio_path in enumerate( visio_paths ) : ext = visio_path.split(".")[-1] if ext != "vsd" and ext != "vsdx": continue svg_path = visio_path.replace("."+ext, ".svg") if os.path.isfile( svg_path ): continue # svg作成済の場合、skip print(i, visio_path ) subprocess.Popen([visio_path], shell=True) visio_win = find_app_win( "VISIO.EXE", ".* Visio Standard") if visio_win == None: print("ERROR fail find_app_win()" ) continue # TODO - visioの起動完了を確認した上で、set_focus()したい time.sleep( 10 ) visio_win.set_focus() # F12 = 名前を付けて保存 pywinauto.keyboard.send_keys("{F12}") time.sleep(3) pywinauto.keyboard.send_keys("{TAB}") time.sleep(1) pywinauto.keyboard.send_keys("{DOWN 10}") # 保存形式: SVG選択 time.sleep(1) pywinauto.keyboard.send_keys("{ENTER}") time.sleep(1) # 保存後にSVGを表示しない設定をon pywinauto.keyboard.send_keys("{TAB 3}") pywinauto.keyboard.send_keys("{SPACE}") # 保存実行 pywinauto.keyboard.send_keys("{ENTER}") time.sleep(3) # TODO - visioの保存完了を確認した上で、終了したい pywinauto.keyboard.send_keys("%{F4}") # visio終了 time.sleep(3) def find_app_win( proc_name, win_name ): app_pid = None for i in range(20): for proc in psutil.process_iter(attrs=['pid', 'name']): if proc_name in proc.info['name']: app_pid = proc.info['pid'] break if app_pid != None: break # 探索対象のアプリが、起動前の可能性もある為 time.sleep(1) if app_pid == None: return app = pywinauto.Application().connect(process=app_pid) app_win = app.window( title_re=win_name ) return app_win if __name__ == '__main__': main()