Option Explicit

Public Type ACC_RECT
    pxLeft   As Long
    pxTop    As Long
    pxRight  As Long
    pxBottom As Long
End Type

'
' パラメータ値定義 文字情報取得
'
Public Const GS_ACC_INFO_NAME = 1
Public Const GS_ACC_INFO_VALUE = 2
Public Const GS_ACC_INFO_DESCRIPTION = 3
Public Const GS_ACC_INFO_DEFAULTACTION = 4

'
' パラメータ値定義 数値情報取得
'
Public Const GS_ACC_NUM_ROLE = 1
Public Const GS_ACC_NUM_STATE = 2
Public Const GS_ACC_NUM_CHILDCOUNT = 3
Public Const GS_ACC_NUM_LOCATION = 4
Public Const GS_ACC_NUM_ID = 5

'
' DLL内関数定義
'

'---------------------------------------------------------------
' ポイント直下の文字列取得
'---------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
' lpString : 文字列格納バッファアドレス
' nMaxCount: バッファサイズ
'
' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetText Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal lpString As String, _
    ByVal nMaxCount As Long) As Long

'---------------------------------------------------------------
' ポイント直下の全体文字列取得
'---------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
' lpString : 文字列格納バッファアドレス
' nMaxCount: バッファサイズ
'
' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetFullText Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal lpString As String, _
    ByVal nMaxCount As Long) As Long

'---------------------------------------------------------------
' ステータスバーテキスト取得
'---------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
' lpString : 文字列格納バッファアドレス
' nMaxCount: バッファサイズ
'
' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetStatusText Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal lpString As String, _
    ByVal nMaxCount As Long) As Long


'-----------------------------------------------------------
'
' MSAA(Microsoft Active Accessibility)文字情報取得
'
' x,y      : スクリーン座標(Pixcel)
' lpString : 文字列格納バッファアドレス
' nMaxCount: バッファサイズ
' item     : 取得情報種別 上記の「パラメータ値定義」参照
'
' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetAccInfo Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal lpString As String, _
    ByVal nMaxCount As Long, _
    ByVal item As Long) As Long

'-------------------------------------------------------------
' MSAA 数値情報取得
'-------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
' item     : 取得情報種別 上記の「パラメータ値定義」参照
'
' 返却値   : >=0:数値情報 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetAccNum Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal item As Long) As Long


'-------------------------------------------------------------
' MSAA オブジェクト位置取得
'-------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
' lpRect   : 位置情報を格納する構造体
'            メンバー pxLeft,pxTop,pxRight,pxBottom
'               左位置、上位置、右位置、下位置(Pixcel)がセットされる
' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetAccLocation Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long, _
    ByRef lpRect As ACC_RECT) As Long


'-------------------------------------------------------------
' Role値を文字列に変換
'-------------------------------------------------------------

' Role      : GetAccNum で取得した値
' lpString : 文字列格納バッファアドレス
' nMaxCount: バッファサイズ

' 返却値   : 0:正常 -1:取得失敗 -2:バッファサイズオーバー
'
Public Declare PtrSafe Function GetAccRoleText Lib "GetText.dll" ( _
    ByVal Role As Long, _
    ByVal lpString As String, _
    ByVal nMaxCount As Long) As Long
    
'-------------------------------------------------------------
' オブジェクト種別取得
'-------------------------------------------------------------

' x,y      : スクリーン座標(Pixcel)
'
' 返却値   : -1:取得失敗 0:不明 1:Simple Element 2:Real Object 3:Container
'
Public Declare PtrSafe Function GetObjType Lib "GetText.dll" ( _
    ByVal x As Long, _
    ByVal y As Long) As Long
    
    
'-------------------------------------------------------------
' ライセンスキー登録
'-------------------------------------------------------------

' 返却値   : 0:登録成功 -1:失敗 -2:不正ライセンス
'
Public Declare PtrSafe Function RegistKey Lib "GetText.dll" ( _
    ByVal LicenseKey As String) As Long


'/////////////////////////////////////////////////////////////////

'【Role】の意味
Private Const ROLE_SYSTEM_TITLEBAR = 1
Private Const ROLE_SYSTEM_MENUBAR = 2
Private Const ROLE_SYSTEM_SCROLLBAR = 3
Private Const ROLE_SYSTEM_GRIP = 4
Private Const ROLE_SYSTEM_SOUND = 5
Private Const ROLE_SYSTEM_CURSOR = 6
Private Const ROLE_SYSTEM_CARET = 7
Private Const ROLE_SYSTEM_ALERT = 8
Private Const ROLE_SYSTEM_WINDOW = 9
Private Const ROLE_SYSTEM_CLIENT = 10
Private Const ROLE_SYSTEM_MENUPOPUP = 11
Private Const ROLE_SYSTEM_MENUITEM = 12
Private Const ROLE_SYSTEM_TOOLTIP = 13
Private Const ROLE_SYSTEM_APPLICATION = 14
Private Const ROLE_SYSTEM_DOCUMENT = 15
Private Const ROLE_SYSTEM_PANE = 16
Private Const ROLE_SYSTEM_CHART = 17
Private Const ROLE_SYSTEM_DIALOG = 18
Private Const ROLE_SYSTEM_BORDER = 19
Private Const ROLE_SYSTEM_GROUPING = 20
Private Const ROLE_SYSTEM_SEPARATOR = 21
Private Const ROLE_SYSTEM_TOOLBAR = 22
Private Const ROLE_SYSTEM_STATUSBAR = 23
Private Const ROLE_SYSTEM_TABLE = 24
Private Const ROLE_SYSTEM_COLUMNHEADER = 25
Private Const ROLE_SYSTEM_ROWHEADER = 26
Private Const ROLE_SYSTEM_COLUMN = 27
Private Const ROLE_SYSTEM_ROW = 28
Private Const ROLE_SYSTEM_CELL = 29
Private Const ROLE_SYSTEM_LINK = 30
Private Const ROLE_SYSTEM_HELPBALLOON = 31
Private Const ROLE_SYSTEM_CHARACTER = 32
Private Const ROLE_SYSTEM_LIST = 33
Private Const ROLE_SYSTEM_LISTITEM = 34
Private Const ROLE_SYSTEM_OUTLINE = 35
Private Const ROLE_SYSTEM_OUTLINEITEM = 36
Private Const ROLE_SYSTEM_PAGETAB = 37
Private Const ROLE_SYSTEM_PROPERTYPAGE = 38
Private Const ROLE_SYSTEM_INDICATOR = 39
Private Const ROLE_SYSTEM_GRAPHIC = 40
Private Const ROLE_SYSTEM_STATICTEXT = 41
Private Const ROLE_SYSTEM_TEXT = 42
Private Const ROLE_SYSTEM_PUSHBUTTON = 43
Private Const ROLE_SYSTEM_CHECKBUTTON = 44
Private Const ROLE_SYSTEM_RADIOBUTTON = 45
Private Const ROLE_SYSTEM_COMBOBOX = 46
Private Const ROLE_SYSTEM_DROPLIST = 47
Private Const ROLE_SYSTEM_PROGRESSBAR = 48
Private Const ROLE_SYSTEM_DIAL = 49
Private Const ROLE_SYSTEM_HOTKEYFIELD = 50
Private Const ROLE_SYSTEM_SLIDER = 51
Private Const ROLE_SYSTEM_SPINBUTTON = 52
Private Const ROLE_SYSTEM_DIAGRAM = 53
Private Const ROLE_SYSTEM_ANIMATION = 54
Private Const ROLE_SYSTEM_EQUATION = 55
Private Const ROLE_SYSTEM_BUTTONDROPDOWN = 56
Private Const ROLE_SYSTEM_BUTTONMENU = 57
Private Const ROLE_SYSTEM_BUTTONDROPDOWNGRID = 58
Private Const ROLE_SYSTEM_WHITESPACE = 59
Private Const ROLE_SYSTEM_PAGETABLIST = 60
Private Const ROLE_SYSTEM_CLOCK = 61
Private Const ROLE_SYSTEM_SPLITBUTTON = 62
Private Const ROLE_SYSTEM_IPADDRESS = 63

'【State】の意味
Private Const STATE_SYSTEM_NORMAL = &H0
Private Const STATE_SYSTEM_UNAVAILABLE = &H1        '使用不可
Private Const STATE_SYSTEM_SELECTED = &H2           '選択されている
Private Const STATE_SYSTEM_FOCUSED = &H4            'フォーカスされている
Private Const STATE_SYSTEM_PRESSED = &H8            '押下されている

Private Const STATE_SYSTEM_CHECKED = &H10           'チェック
Private Const STATE_SYSTEM_MIXED = &H20
Private Const STATE_SYSTEM_READONLY = &H40          '読み取り専用
Private Const STATE_SYSTEM_HOTTRACKED = &H80

Private Const STATE_SYSTEM_ALERT_LOW = &H4000000
Private Const STATE_SYSTEM_ALERT_MEDIUM = &H8000000
Private Const STATE_SYSTEM_ALERT_HIGH = &H10000000

Private Const STATE_SYSTEM_DEFAULT = &H100
Private Const STATE_SYSTEM_EXPANDED = &H200         '展開されている
Private Const STATE_SYSTEM_COLLAPSED = &H400
Private Const STATE_SYSTEM_BUSY = &H800

Private Const STATE_SYSTEM_FLOATING = &H1000        'フローティング
Private Const STATE_SYSTEM_MARQUEED = &H2000
Private Const STATE_SYSTEM_ANIMATED = &H4000
Private Const STATE_SYSTEM_INVISIBLE = &H8000       '可視

Private Const STATE_SYSTEM_OFFSCREEN = &H10000
Private Const STATE_SYSTEM_SIZEABLE = &H20000       'サイズ変更可
Private Const STATE_SYSTEM_MOVEABLE = &H40000       '移動可
Private Const STATE_SYSTEM_SELFVOICING = &H80000

Private Const STATE_SYSTEM_FOCUSABLE = &H100000     'フォーカス可
Private Const STATE_SYSTEM_SELECTABLE = &H200000    '選択可
Private Const STATE_SYSTEM_LINKED = &H400000        'リンク
Private Const STATE_SYSTEM_TRAVERSED = &H800000

Private Const STATE_SYSTEM_MULTISELECTABLE = &H1000000  '複数選択可
Private Const STATE_SYSTEM_EXTSELECTABLE = &H2000000
Private Const STATE_SYSTEM_HASPOPUP = &H40000000

Private Const STATE_SYSTEM_VALID = &H1FFFFFFF



'/////////////////////////////////////////////////////////////////////////
'
' ラッパー関数
'
Public Function MyGetText(x As Long, y As Long) As String
'
' ポイント直下の文字列取得
'
    Const MAX_SIZE = 512
    Dim strBuf As String * MAX_SIZE
    Dim rc As Long
        
    MyGetText = ""
    rc = GetText(x, y, strBuf, MAX_SIZE)
    MyGetText = left(strBuf, InStr(strBuf, vbNullChar) - 1)
    
End Function

Public Function MyGetStatusText(x As Long, y As Long) As String
'
' ウィンドウステータスバー文字列取得
'
    Const MAX_SIZE = 512
    Dim strBuf As String * MAX_SIZE
    Dim rc As Long
        
    MyGetStatusText = ""
    rc = GetStatusText(x, y, strBuf, MAX_SIZE)
    MyGetStatusText = left(strBuf, InStr(strBuf, vbNullChar) - 1)

End Function

Public Function MyGetAccInfo(x As Long, y As Long, item As Long) As String
'
' MSAA(Microsoft Active Accessibility)文字情報取得
'
    Const MAX_SIZE = 512
    Dim strBuf As String * MAX_SIZE
    Dim rc As Long
        
    MyGetAccInfo = ""
    rc = GetAccInfo(x, y, strBuf, MAX_SIZE, item)
    MyGetAccInfo = left(strBuf, InStr(strBuf, vbNullChar) - 1)

End Function

Public Function MyGetFullText(x As Long, y As Long) As String
'
' MSAA(Microsoft Active Accessibility)数値情報取得
'
    Const MAX_SIZE = 4096
    Dim strBuf As String * MAX_SIZE
    Dim rc As Long

    MyGetFullText = ""
    rc = GetFullText(x, y, strBuf, MAX_SIZE)
    MyGetFullText = left(strBuf, InStr(strBuf, vbNullChar) - 1)
    
End Function

Public Function MyGetAccRoleText(Role As Long) As String
'
' オブジェクト種別(役割)取得
'
    Const MAX_SIZE = 4096
    Dim strBuf As String * MAX_SIZE
    Dim rc As Long

    MyGetAccRoleText = ""
    rc = GetAccRoleText(Role, strBuf, MAX_SIZE)
    MyGetAccRoleText = left(strBuf, InStr(strBuf, vbNullChar) - 1)
    
End Function