import comtypes
from comtypes import CoCreateInstance
import comtypes.client
from comtypes.gen.UIAutomationClient import *
uia = None
root_element = None
def uia_init():
global uia
global root_element
uia = CoCreateInstance(CUIAutomation._reg_clsid_,
interface=IUIAutomation,
clsctx=comtypes.CLSCTX_INPROC_SERVER)
root_element = uia.GetRootElement()
def get_window_element(title):
"""
titleに指定したウィンドウのAutomationElement を取得する
デスクトップ上でtitleが重複している場合、最初に見つかったものを返す
"""
win_element = root_element.FindFirst(TreeScope_Children,
uia.CreatePropertyCondition(
UIA_NamePropertyId, title))
return win_element
def find_save_control(base_element):
condition = uia.CreatePropertyCondition(UIA_NamePropertyId, "保存")
ctl_elements = base_element.FindAll(TreeScope_Subtree, condition)
return [ ctl_elements.GetElement(i) for i in range(ctl_elements.Length) ]
def click_button(element):
"""
指定したelement をIUIAutomationInvokePattern.Invoke() でクリックする
指定したelementのIsInvokePatternAvailableプロパティがFalseの場合何もしない
"""
isClickable = element.GetCurrentPropertyValue(UIA_IsInvokePatternAvailablePropertyId)
if isClickable == True:
ptn = element.GetCurrentPattern(UIA_InvokePatternId)
ptn.QueryInterface(IUIAutomationInvokePattern).Invoke()
评论