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