comtypesを使ってWindowsのアプリケーションの要素に値を設定する

pip install comtypesでモジュールをインストールするとpythonでWindowsのデスクトップで表示しているアプリケーションにアクセスできるようだ。
すばらしい記事 に従って試すと、これがおもしろい。
MicrosoftのUI Automationを介してアプリケーションにアクセスするが、私はこれに慣れていない。
"できたらそれで良い"ポリシーでコードを書くw

要素に値を設定する

Google ChromeのアドレスバーにおいてURLの入力を試みる。
Google Chromeを起動し、新しいタブを表示した状態で次のコードを実行する。
# coding=utf-8

import comtypes
from comtypes import CoCreateInstance
import comtypes.client
comtypes.client.GetModule('UIAutomationCore.dll')
from comtypes.gen.UIAutomationClient import *

def get(base_element, condition, scope=TreeScope_Subtree):
	elements = base_element.FindAll(scope, condition)
	return [ elements.GetElement(i) for i in range(elements.Length) ]

uia = CoCreateInstance(CUIAutomation._reg_clsid_, interface=IUIAutomation, clsctx=comtypes.CLSCTX_INPROC_SERVER|comtypes.CLSCTX_INPROC_HANDLER|comtypes.CLSCTX_LOCAL_SERVER|comtypes.CLSCTX_REMOTE_SERVER)
root_element = uia.GetRootElement()

condition = uia.CreatePropertyCondition(UIA_NamePropertyId, '新しいタブ - Google Chrome')
window = get(root_element, condition, TreeScope_Children)[0]

condition = uia.CreatePropertyCondition(UIA_NamePropertyId, 'アドレス検索バー')
element = get(window, condition)[0]

isEditable = element.GetCurrentPropertyValue(UIA_IsValuePatternAvailablePropertyId)
if isEditable:
	ptn = element.GetCurrentPattern(UIA_ValuePatternId)
	ptn.QueryInterface(IUIAutomationValuePattern).SetValue('https://blog.i-o.io/')
2019/12/26 17:36
タグ