以下の内容はhttps://end0tknr.hateblo.jp/entry/20260126/1769400416より取得しました。


pywinauto for python で visioを操作し、svgへ変換

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()



以上の内容はhttps://end0tknr.hateblo.jp/entry/20260126/1769400416より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14