LoginSignup

Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

1
2

Excel VBAใงUIAutomationใ‚’็”จใ„ใฆ็”ป้ขใฎ่ฆ็ด ใ‚’่ชฟๆŸป_ver.2.0

Posted at

ๆฆ‚่ฆ

  • VBAใงUIAutomationใ‚’็”จใ„ใฆใ€UI่ฆ็ด ใ‚’่ชฟในใ‚‹ใŸใ‚ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใงใ™ใ€‚ไปฅไธ‹ใฎๅ‹•็”ปใงไฝฟใ‚ใ‚Œใฆใ„ใ‚‹ใ‚‚ใฎใงใ™ใ€‚

ใพใŸใ€ไปฅไธ‹ใฎๅ‹•็”ปใ‚‚ๅˆใ‚ใ›ใฆ็ขบ่ชใ™ใ‚‹ใจใ€ใ‚ใ‹ใ‚Šใ‚„ใ™ใ„ใจๆ€ใ„ใพใ™ใ€‚

ๅ‹•ไฝœๅ‰ใฎ่จญๅฎš

  • ๅฟ…ใšVBEใฎๅ‚็…ง่จญๅฎšใงUIAutomationClientใฎๅ‚็…งใ‚’ๆœ‰ๅŠนๅŒ–ใ—ใฆใใ ใ•ใ„ใ€‚
    image.png

ๅฎŸ่กŒ็’ฐๅขƒ

ไปฅไธ‹ใฎ็’ฐๅขƒใงๅ‹•ไฝœ็ขบ่ชใ‚’ใ—ใพใ—ใŸใ€‚

  • Windows11ใงใฎExcel 2021

ๆณจๆ„็‚น

  • ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅฎŸ่กŒใซใคใ„ใฆใฏใ€ใ™ในใฆ่‡ชๅทฑ่ฒฌไปปใง่กŒใฃใฆใใ ใ•ใ„ใ€‚ๅฎŸ่กŒใซใ‚ˆใ‚Š็™บ็”Ÿใ—ใŸใ€ใ„ใ‹ใชใ‚‹็›ดๆŽฅ็š„ใพใŸใฏ้–“ๆŽฅ็š„่ขซๅฎณใซใคใ„ใฆใ€ไฝœ่€…ใฏใใฎ่ฒฌไปปใ‚’่ฒ ใ„ใพใ›ใ‚“ใ€‚

ใ‚ณใƒผใƒ‰ใฎ็ฐกๅ˜ใช่งฃ่ชฌ

ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅคงใพใ‹ใชๆตใ‚Œใฏไปฅไธ‹ใฎใจใŠใ‚Šใงใ™ใ€‚

  1. ใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆๅใ‹ใ‚‰ใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—
  2. ใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆๅ†…ใฎใ™ในใฆใฎ่ฆ็ด ใ‚’ๅ–ๅพ—
  3. ใใ‚Œใžใ‚Œใฎ่ฆ็ด ใฎๅๅ‰ใ‚„ใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—ใ‚’ใƒ‡ใƒใƒƒใ‚ฐใ™ใ‚‹

ๅฎŸ่กŒๆ–นๆณ•

ๅฎŸ่กŒๆ™‚ใฏใ€ŒCheckAllElementsWithUIAutomationใ€ใ‚ตใƒ–ใƒ—ใƒญใ‚ทใƒผใ‚ธใƒฃๅ†…ใฎใ€ŒCall GetAllElements(ใ€€,ใ€€)ใ€ใฎๅผ•ๆ•ฐใ‚’ๆŒ‡ๅฎšใ—ใฆใ€ๅฝ“่ฉฒใƒ—ใƒญใ‚ทใƒผใ‚ธใƒฃใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

  • ็ฌฌไธ€ๅผ•ๆ•ฐ๏ผˆๅฟ…้ ˆ๏ผ‰ใฏใ€ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅ๏ผˆๅๅ‰ใฎไธ€้ƒจใงใ‚‚ๅฏ่ƒฝ๏ผ‰ใ‚’ๆŒ‡ๅฎšใ—ใฆใใ ใ•ใ„ใ€‚ๅŒใ˜ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅใฎใ‚‚ใฎใŒไบŒใคไปฅไธŠ้–‹ใ‹ใ‚Œใฆใ„ใชใ„ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚

  • ็ฌฌไบŒๅผ•ๆ•ฐ๏ผˆ็œ็•ฅๅฏ่ƒฝ๏ผ‰ใฏใ€่ฆ็ด ๅใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚็ฌฌไบŒๅผ•ๆ•ฐใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€ๅฝ“่ฉฒ่ฆ็ด ๅใ‚’ๅซใ‚€่ฆ็ด ใŒๅ‡บ็พใ—ใŸ้š›ใซใ€ใƒ—ใƒญใ‚ทใƒผใ‚ธใƒฃใฎๅฎŸ่กŒใŒๆญขใพใ‚Šใพใ™ใ€‚

ๅฎŸ่กŒไพ‹

  • ใ‚ณใƒผใƒ‰ใซ่จ˜่ผ‰ใ•ใ‚Œใฆใ„ใ‚‹ใ€ŒCall GetAllElements("Challenge", "ไฝๆ‰€")ใ€ใฏใ€่จ˜่ผ‰ไพ‹ใงใ™ใ€‚
  • ใ“ใ‚Œใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ€ใ€ŒChallengeใ€ใจใ„ใ†ๅๅ‰ใŒใคใๆœ€ๅˆใฎใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆใ‚’ๅ–ๅพ—ใ—ใ€ใ€Œไฝๆ‰€ใ€ใจใ„ใ†่ฆ็ด ๅใฎใ‚‚ใฎใŒๅ‡บ็พใ—ใŸใ‚‰ใƒ‡ใƒใƒƒใ‚ฐใŒๆญขใพใ‚Šใพใ™ใ€‚
    โ€ปใ€ŒChallengeใ€ใจใ„ใ†ๅๅ‰ใŒใคใใ‚ฆใ‚คใƒณใƒ‰ใ‚ฆใŒ่ค‡ๆ•ฐใชใ„ใ“ใจใ‚’็ขบ่ชใ—ใŸใ†ใˆใงใ€ๅฎŸ่กŒใ—ใพใ™ใ€‚

ๅ„่ญ˜ๅˆฅๅญใซใคใ„ใฆ

  • ControlTypeIdใฏไปฅไธ‹ใฎใ‚ตใ‚คใƒˆใ‚’ๅ‚็…งใ—ใฆใ€่จ˜่ผ‰ใ—ใพใ—ใŸใ€‚

  • ControlPatternใฏไปฅไธ‹ใฎใ‚ตใ‚คใƒˆใ‹ใ‚‰ใ‚ˆใไฝฟใ†ใ‚‚ใฎใ‚’ๆŠœ็ฒ‹ใ—ใพใ—ใŸใ€‚

ใ‚ณใƒผใƒ‰_ver.2.0

VBA
Option Explicit

' GetNextWindow้–ขๆ•ฐใฎๅฎฃ่จ€
Declare PtrSafe Function GetNextWindow Lib "user32" Alias "GetWindow" _
  (ByVal hwnd As LongPtr, ByVal wFlag As Long) As LongPtr
' GetNextWindow้–ขๆ•ฐใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎๆฌกใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—ใ™ใ‚‹้–ขๆ•ฐใงใ™ใ€‚

' IsWindowVisible้–ขๆ•ฐใฎๅฎฃ่จ€
Declare PtrSafe Function IsWindowVisible Lib "user32" _
  (ByVal hwnd As LongPtr) As LongPtr
' IsWindowVisible้–ขๆ•ฐใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใŒๅฏ่ฆ–็Šถๆ…‹ใ‹ใฉใ†ใ‹ใ‚’ๅˆคๅฎšใ™ใ‚‹้–ขๆ•ฐใงใ™ใ€‚

' GetWindowText้–ขๆ•ฐใฎๅฎฃ่จ€
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
  (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As Long) As LongPtr
' GetWindowText้–ขๆ•ฐใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅ–ๅพ—ใ™ใ‚‹้–ขๆ•ฐใงใ™ใ€‚

' FindWindow้–ขๆ•ฐใฎๅฎฃ่จ€
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
' FindWindow้–ขๆ•ฐใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใ‚ฏใƒฉใ‚นๅใ‚„ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅใ‹ใ‚‰ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—ใ™ใ‚‹้–ขๆ•ฐใงใ™ใ€‚

Dim hwnd As LongPtr ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ไฟๆŒใ™ใ‚‹ๅค‰ๆ•ฐ

Const GW_HWNDLAST = 1 ' ๆœ€ๅพŒใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ
Const GW_HWNDNEXT = 2 ' ๆฌกใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ

' getWindowHandle้–ขๆ•ฐ๏ผˆ็‹ฌ่‡ช้–ขๆ•ฐ๏ผ‰
Function getWindowHandle(ByVal PartialWindowName As String) As LongPtr
    Dim strCaption As String * 500 ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒ†ใ‚ญใ‚นใƒˆใ‚’ไฟๆŒใ™ใ‚‹ๅค‰ๆ•ฐ
    hwnd = FindWindow(vbNullString, vbNullString) ' ๆœ€ๅˆใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—
    Dim cnt As Long ' ใ‚ซใ‚ฆใƒณใ‚ฟๅค‰ๆ•ฐ
    cnt = 0
    Dim cap As String ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒ†ใ‚ญใ‚นใƒˆใ‚’ไฟๆŒใ™ใ‚‹ๅค‰ๆ•ฐ
    Do
        If IsWindowVisible(hwnd) Then ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใŒๅฏ่ฆ–็Šถๆ…‹ใ‹ใฉใ†ใ‹ใ‚’ๅˆคๅฎš
            GetWindowText hwnd, strCaption, Len(strCaption) ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅ–ๅพ—
            cap = Left(strCaption, InStr(strCaption, vbNullChar) - 1) ' ใƒŒใƒซๆ–‡ๅญ—ใพใงใฎ้ƒจๅˆ†ใ‚’ๆŠฝๅ‡บ
            If InStr(cap, PartialWindowName) <> 0 Then ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒ†ใ‚ญใ‚นใƒˆใซๆŒ‡ๅฎšใฎๆ–‡ๅญ—ๅˆ—ใŒๅซใพใ‚Œใฆใ„ใ‚‹ใ‹ใ‚’ๅˆคๅฎš
                getWindowHandle = hwnd ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’่ฟ”ใ™
                Exit Function ' ้–ขๆ•ฐใ‚’็ต‚ไบ†
            End If
        End If
        hwnd = GetNextWindow(hwnd, GW_HWNDNEXT) ' ๆฌกใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—
        DoEvents ' ใ‚คใƒ™ใƒณใƒˆใ‚’ๅ‡ฆ็†
        If hwnd = GetNextWindow(hwnd, GW_HWNDLAST) And cnt = 0 Then ' ๆœ€ๅพŒใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใงๅˆๅ›žใฎๅ ดๅˆ
            cnt = 1
        ElseIf hwnd = GetNextWindow(hwnd, GW_HWNDLAST) And cnt = 1 Then ' ๆœ€ๅพŒใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใง2ๅ›ž็›ฎใฎๅ ดๅˆ
            Debug.Print "ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅ–ๅพ—ใซๅคฑๆ•—" ' ใƒ‡ใƒใƒƒใ‚ฐใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใซใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅ‡บๅŠ›
            Application.Wait [Now()] + (1 / 86400) ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใƒใƒณใƒ‰ใƒซๅคฑๆ•—็”จใฎๅพ…ๆฉŸ
            hwnd = FindWindow(vbNullString, vbNullString) ' ๆœ€ๅˆใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—ใ—็›ดใ™
            cnt = 0 ' ใ‚ซใ‚ฆใƒณใ‚ฟใ‚’ใƒชใ‚ปใƒƒใƒˆ
        End If
    Loop
End Function

Function GetAllElements(ByVal PartialWindowName As String, Optional ByVal searchWord As String) As String
    ' UIAutomationใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ไฝœๆˆ
    Dim uiAuto As UIAutomationClient.CUIAutomation  ' UIAutomationใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ๆ ผ็ดใ™ใ‚‹ๅค‰ๆ•ฐ
    Set uiAuto = New UIAutomationClient.CUIAutomation  ' ๆ–ฐใ—ใ„UIAutomationใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ไฝœๆˆ

    ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—
    Dim hwnd As LongPtr  ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๆ ผ็ดใ™ใ‚‹ๅค‰ๆ•ฐ
    hwnd = getWindowHandle(PartialWindowName)  ' ๆŒ‡ๅฎšใ•ใ‚ŒใŸ้ƒจๅˆ†ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‚’ๅ–ๅพ—

    ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ่ฆ็ด ใ‚’ๅ–ๅพ—
    Dim elm01 As UIAutomationClient.IUIAutomationElement  ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ่ฆ็ด ใ‚’ๆ ผ็ดใ™ใ‚‹ๅค‰ๆ•ฐ
    Set elm01 = uiAuto.ElementFromHandle(ByVal hwnd)  ' ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎใƒใƒณใƒ‰ใƒซใ‹ใ‚‰UIAutomation่ฆ็ด ใ‚’ๅ–ๅพ—

    ' ๆกไปถใ‚’ไฝœๆˆ
    Dim uiCnd As IUIAutomationCondition  ' ๆกไปถใ‚’ๆ ผ็ดใ™ใ‚‹ๅค‰ๆ•ฐ
    Set uiCnd = uiAuto.CreateTrueCondition  ' ็œŸใฎๆกไปถใ‚’ไฝœๆˆ๏ผˆCreateTrueConditionใฏใ€ๅธธใซ็œŸใจใชใ‚‹ๆกไปถใ‚’ไฝœๆˆใ—ใพใ™ใ€‚็‰นๅฎšใฎๆกไปถใ‚’ๆบ€ใŸใ™่ฆ็ด ใ‚’ๆคœ็ดขใ™ใ‚‹ใฎใงใฏใชใใ€ๅ…จใฆใฎ่ฆ็ด ใ‚’ๅ–ๅพ—ใ™ใ‚‹้š›ใซๅˆฉ็”จใ•ใ‚Œใพใ™ใ€‚๏ผ‰

    ' UIAutomationใฎ่ฆ็ด ใ‚’ๆ ผ็ดใ™ใ‚‹ใŸใ‚ใฎ้…ๅˆ—ใ‚’ๅฎฃ่จ€ใ—ใ€่ฆ็ด ใ‚’ๅ–ๅพ—ใ™ใ‚‹
    Dim aryElm As UIAutomationClient.IUIAutomationElementArray  ' aryElmใฏUIAutomationใฎ่ฆ็ด ใ‚’ๆ ผ็ดใ™ใ‚‹ๅค‰ๆ•ฐ(้…ๅˆ—)ใงใ™
    Set aryElm = elm01.FindAll(TreeScope_Subtree, uiCnd)  ' elm01๏ผˆใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ่ฆ็ด ๏ผ‰ๅ†…ใฎใ‚ตใƒ–ใƒ„ใƒชใƒผๅ…จไฝ“ใ‹ใ‚‰ๆกไปถ๏ผˆuiCnd๏ผ‰ใซไธ€่‡ดใ™ใ‚‹่ฆ็ด ใ‚’ๅ–ๅพ—ใ—ใ€aryElmใซๆ ผ็ด

    ' ใƒ‡ใƒใƒƒใ‚ฐ็”จใซใƒซใƒผใƒ—ๅ†…ใฎ่ฆ็ด ๆƒ…ๅ ฑใ‚’่กจ็คบ
    Dim i As Long

    ' aryElmๅ†…ใฎๅ„่ฆ็ด ใซๅฏพใ—ใฆๅ‡ฆ็†ใ‚’่กŒใ†ใƒซใƒผใƒ—
    For i = 0 To aryElm.Length - 1
        Application.Wait [Now()] + (0.05 / 86400)     ' ็ฐกๅ˜ใชใ‚ฆใ‚งใ‚คใƒˆ๏ผˆๅพ…ๆฉŸ๏ผ‰ใ‚’ๆŒฟๅ…ฅใ™ใ‚‹ใ“ใจใงใ€ๅ‡ฆ็†ใ‚’ใ‚†ใฃใใ‚Š้€ฒใ‚ใ‚‹
        Debug.Print "i=" & i    ' ใƒ‡ใƒใƒƒใ‚ฐ็”จใซ็พๅœจใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ‚’่กจ็คบ
        Debug.Print "   ่ฆ็ด ๅ:" & aryElm.GetElement(i).CurrentName    ' ใƒ‡ใƒใƒƒใ‚ฐ็”จใซ่ฆ็ด ใฎๅๅ‰ใ‚’่กจ็คบ
        Call GetControlTypeByValue(aryElm.GetElement(i).CurrentControlType)    ' ่ฆ็ด ใฎใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—ใ‚’่กจ็คบใ™ใ‚‹้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ™
        Call GetUIPatternAndDebug(aryElm.GetElement(i))    ' UI ใƒ‘ใ‚ฟใƒผใƒณใฎๆƒ…ๅ ฑใ‚’่กจ็คบใ™ใ‚‹้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ™

        ' ๆคœ็ดขใƒฏใƒผใƒ‰ใŒๆŒ‡ๅฎšใ•ใ‚ŒใฆใŠใ‚Šใ€่ฆ็ด ใฎๅๅ‰ใŒๆคœ็ดขใƒฏใƒผใƒ‰ใ‚’ๅซใ‚€ๅ ดๅˆใฏๅœๆญข
        If searchWord <> "" And InStr(aryElm.GetElement(i).CurrentName, searchWord) > 0 Then
            Stop
        End If

        ' ๆคœ็ดขใƒฏใƒผใƒ‰ใŒๆŒ‡ๅฎšใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใ€50ๅ›žใ”ใจใซๅœๆญข
        If searchWord = "" And i Mod 50 = 0 And i <> 0 Then
            Stop
        End If
    Next i
End Function


Function GetControlTypeByValue(ByVal controlTypeCode As Long) As String

    ' ใ‚ณใƒณใƒˆใƒญใƒผใƒซๅž‹่ญ˜ๅˆฅๅญใฎๅ€ค๏ผˆๆ—ขๅฎšๅ€ค๏ผ‰ใ‹ใ‚‰ใ‚ณใƒณใƒˆใƒญใƒผใƒซใฎ็จฎ้กžใฎๅๅ‰ใซๅค‰ๆ›
    Select Case controlTypeCode
        Case 50040
            GetControlTypeByValue = "AppBar"
        Case 50000
            GetControlTypeByValue = "Button"
        Case 50001
            GetControlTypeByValue = "Calendar"
        Case 50002
            GetControlTypeByValue = "CheckBox"
        Case 50003
            GetControlTypeByValue = "ComboBox"
        Case 50025
            GetControlTypeByValue = "Custom"
        Case 50028
            GetControlTypeByValue = "DataGrid"
        Case 50029
            GetControlTypeByValue = "DataItem"
        Case 50030
            GetControlTypeByValue = "Document"
        Case 50004
            GetControlTypeByValue = "Edit"
        Case 50026
            GetControlTypeByValue = "Group"
        Case 50034
            GetControlTypeByValue = "Header"
        Case 50035
            GetControlTypeByValue = "HeaderItem"
        Case 50005
            GetControlTypeByValue = "Hyperlink"
        Case 50006
            GetControlTypeByValue = "Image"
        Case 50008
            GetControlTypeByValue = "List"
        Case 50007
            GetControlTypeByValue = "ListItem"
        Case 50010
            GetControlTypeByValue = "MenuBar"
        Case 50009
            GetControlTypeByValue = "Menu"
        Case 50011
            GetControlTypeByValue = "MenuItem"
        Case 50033
            GetControlTypeByValue = "Pane"
        Case 50012
            GetControlTypeByValue = "ProgressBar"
        Case 50013
            GetControlTypeByValue = "RadioButton"
        Case 50014
            GetControlTypeByValue = "ScrollBar"
        Case 50039
            GetControlTypeByValue = "SemanticZoom"
        Case 50038
            GetControlTypeByValue = "Separator"
        Case 50015
            GetControlTypeByValue = "Slider"
        Case 50016
            GetControlTypeByValue = "Spinner"
        Case 50031
            GetControlTypeByValue = "SplitButton"
        Case 50017
            GetControlTypeByValue = "StatusBar"
        Case 50018
            GetControlTypeByValue = "Tab"
        Case 50019
            GetControlTypeByValue = "TabItem"
        Case 50036
            GetControlTypeByValue = "Table"
        Case 50020
            GetControlTypeByValue = "Text"
        Case 50027
            GetControlTypeByValue = "Thumb"
        Case 50037
            GetControlTypeByValue = "TitleBar"
        Case 50021
            GetControlTypeByValue = "ToolBar"
        Case 50022
            GetControlTypeByValue = "ToolTip"
        Case 50023
            GetControlTypeByValue = "Tree"
        Case 50024
            GetControlTypeByValue = "TreeItem"
        Case 50032
            GetControlTypeByValue = "Window"
    ' ไธŠ่จ˜ใฎใ„ใšใ‚Œใฎใ‚ฑใƒผใ‚นใซใ‚‚ไธ€่‡ดใ—ใชใ„ๅ ดๅˆใ€ๆœช็Ÿฅใฎใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—ใจใ—ใฆ็ฉบๆ–‡ๅญ—ๅˆ—ใ‚’่ฟ”ใ—ใพใ™ใ€‚
        Case Else
            ' ๆœช็Ÿฅใฎใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—ใฎๅ ดๅˆ
            GetControlTypeByValue = "" ' ๆœช็Ÿฅใฎใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—ใงใ™ใ€‚
    End Select

    ' ็ตๆžœใ‚’ใƒ‡ใƒใƒƒใ‚ฐๅ‡บๅŠ›
    Debug.Print "   ่ฆ็ด ใฎใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฟใ‚คใƒ—:" & GetControlTypeByValue  ' ็ตๆžœใ‚’ใƒ‡ใƒใƒƒใ‚ฐใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใซๅ‡บๅŠ›ใ—ใพใ™ใ€‚
End Function


' UI่ฆ็ด ใฎใƒ‘ใ‚ฟใƒผใƒณใ‚’ๅ–ๅพ—ใ—ใ€ใใ‚ŒใซๅŸบใฅใ„ใฆใƒ‡ใƒใƒƒใ‚ฐใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅ‡บๅŠ›ใ™ใ‚‹้–ขๆ•ฐ
Function GetUIPatternAndDebug(ByVal uiElm As UIAutomationClient.IUIAutomationElement)
    ' uiElm: UIAutomation่ฆ็ด ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ

    ' UI่ฆ็ด ใ‚’ๅฑ•้–‹๏ผๆŠ˜ใ‚Š็•ณใฟใ™ใ‚‹ใŸใ‚ใฎใƒ‘ใ‚ฟใƒผใƒณ
    Dim UIExpandCollapsePattern As IUIAutomationExpandCollapsePattern
    Set UIExpandCollapsePattern = uiElm.GetCurrentPattern(10005)

    ' UI่ฆ็ด ใ‚’่ตทๅ‹•ใ™ใ‚‹ใŸใ‚ใฎใƒ‘ใ‚ฟใƒผใƒณ
    Dim UIInvokePattern As IUIAutomationInvokePattern
    Set UIInvokePattern = uiElm.GetCurrentPattern(10000)

    ' UI่ฆ็ด ใ‚’้ธๆŠžใ™ใ‚‹ใƒ‘ใ‚ฟใƒผใƒณ
    Dim UISelectionItemPattern As IUIAutomationSelectionItemPattern
    Set UISelectionItemPattern = uiElm.GetCurrentPattern(10010)

    ' UI่ฆ็ด ใฎใ‚ชใƒณใจใ‚ชใƒ•ใฎ็Šถๆ…‹ใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹ใŸใ‚ใฎใƒ‘ใ‚ฟใƒผใƒณ
    Dim UITogglePattern As IUIAutomationTogglePattern
    Set UITogglePattern = uiElm.GetCurrentPattern(10015)

    ' UI่ฆ็ด ใฎๅ€คใ‚’่จญๅฎš๏ผๅ–ๅพ—ใ™ใ‚‹ใŸใ‚ใฎใƒ‘ใ‚ฟใƒผใƒณ
    Dim UIValuePattern As IUIAutomationValuePattern
    Set UIValuePattern = uiElm.GetCurrentPattern(10002)
    
    ' UI่ฆ็ด ใ‚’ใ‚นใ‚ฏใƒญใƒผใƒซใ™ใ‚‹ใŸใ‚ใฎใƒ‘ใ‚ฟใƒผใƒณ
    Dim UIScrollPattern As IUIAutomationScrollPattern
    Set UIScrollPattern = uiElm.GetCurrentPattern(10004)
    
    ' ๅ„ใƒ‘ใ‚ฟใƒผใƒณใŒๅ–ๅพ—ใงใใฆใ„ใ‚‹ใ‹ใ‚’็ขบ่ชใ—ใ€ใƒ‡ใƒใƒƒใ‚ฐใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅ‡บๅŠ›
    If Not UIExpandCollapsePattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:ExpandCollapse"
    End If
    If Not UIInvokePattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:Invoke"
    End If
    If Not UISelectionItemPattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:SelectionItem"
    End If
    If Not UITogglePattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:Toggle"
    End If
    If Not UIValuePattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:Value"
    End If
    If Not UIScrollPattern Is Nothing Then
        Debug.Print "   ๅฏ่ƒฝใชๆ“ไฝœ:Scroll"
    End If
    
End Function

' UIAutomationใ‚’ไฝฟ็”จใ—ใฆใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸ้ƒจๅˆ†ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅๅ†…ใฎUI่ฆ็ด ใ‚’ๅ–ๅพ—ใ—ใ€ใƒ‡ใƒใƒƒใ‚ฐ่กจ็คบใ™ใ‚‹ใ‚ตใƒ–ใƒ—ใƒญใ‚ทใƒผใ‚ธใƒฃ
Sub CheckAllElementsWithUIAutomation()
    ' GetAllElements้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ—ใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸ้ƒจๅˆ†ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆๅใจๆคœ็ดขใƒฏใƒผใƒ‰ใ‚’ๆธกใ™
    Call GetAllElements("Challenge", "ไฝๆ‰€")
End Sub


ใ‚ณใƒผใƒ‰ใฎไฟฎๆญฃๅฑฅๆญด

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Comments

fenblen_puyo
@fenblen_puyo
(Edited)

ใ‚ใ‚‹IUIAutomationElementใŒใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใ‚‹PropertyIdใ‚„PatternIdใ‚’็ขบ่ชใ™ใ‚‹ใฎใงใ‚ใ‚Œใฐใ€uiauto.PollForPotentialSupportedPropertiesใ‚„uiauto.PollForPotentialSupportedPatternsใจใ„ใ†็›ดๆŽฅ็š„ใชใƒกใ‚ฝใƒƒใƒ‰ใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใŸใ‚Šใ—ใพใ™ใ€‚

1
Mrs_P
@Mrs_P

ใŸใƒผใผใƒผใ•ใ‚“ใ€ๅˆใ‚ใพใ—ใฆใ€‚
UIAใฎ้™็•Œ้›†่ฝใฎ่จ˜ไบ‹ใ‚’ใใฃใ‹ใ‘ใซๅ‹‰ๅผทใ•ใ›ใฆใ„ใŸใ ใ„ใฆใ„ใพใ™ใ€‚๏ผˆTwitterใ‚‚ใƒ•ใ‚ฉใƒญใƒผใ•ใ›ใฆใ„ใŸใ ใ„ใฆใ„ใพใ™๏ผ‰
ใ„ใŸใ ใ„ใŸๆƒ…ๅ ฑใฏใ€่ฆ็ด ใฎใ™ในใฆใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚„ใƒ‘ใ‚ฟใƒผใƒณใ‚’็ขบ่ชใ™ใ‚‹้š›ใซไพฟๅˆฉใงใ™ใญใ€‚ใ€‚ๅ‹‰ๅผทใซใชใ‚Šใพใ—ใŸ๏ผ

ไปŠๅพŒใ‚‚่‰ฒใ€…ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚ใ‚ˆใ‚ใ—ใใŠ้ก˜ใ„ใ„ใŸใ—ใพใ™ใ€‚

1

Let's comment your feelings that are more than good

Being held Article posting campaign

ใใ†ใ ๏ผTestRailใ‚’ไฝฟใฃใฆใฟใ‚ˆใ†๏ผ๏ผ

~
View details

ใ“ใ‚Œใ‹ใ‚‰ใฎๆƒ…ๅ ฑไผ้”ๆ‰‹ๆฎตใฎๅœจใ‚Šๆ–นใซใคใ„ใฆ่€ƒใˆใฆใฟใ‚ˆใ†๏ผ

~
View details
1
2

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address