大変お世話になっております。
IAccessibleでYouTubeなどのMacromediaFlashPlayerActiveX
の再生ボタンなどを操作したくて、ハンドルの取得をしたいと思っておりまして、
前回色々教えて頂き試行錯誤したのですが、どうにもならずに断念しておりました。
その時のURL
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200805/08050033.txt
下記のような方法でMacromediaFlashPlayerActiveXのハンドルを取得しているのですが、
それより子のボタンやプログレスバーのハンドルを取得することができないです。
(IEtitleの内容はインターネットエクスプローラーで
YouTubeで動画を再生するページを表示した際のウィンドウタイトルバーのキャプションを入れます。)
AccExplorer32.exeで試すとボタンのIDも取得できて、AccExplorer32からボタンを押す動作を
送ることもできるので何とかそのようなことをしたいので、
ハンドルの取得方法を教えて頂けたら幸いです。
手動で座標を指定してMouseイベントでやっていたのですが、
すごく不便なので、この方法を実現したいです。
環境はVB2003 + Framework1.1 + WindowsXP-PRO(SP2)です。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim lngHWND As Integer
Dim objAcc As IAccessible
Dim IEtitle as String = "YouTube - サンプル動画 - Microsoft Internet Explorer"
ListBox1.Items.Clear()
Dim h As Integer
h = FindWindow(vbNullString, IEtitle)
h = FindWindowEx(h, 0, "Shell DocObject View", vbNullString)
h = FindWindowEx(h, 0, "Internet Explorer_Server", vbNullString)
h = FindWindowEx(h, 0, "MacromediaFlashPlayerActiveX", vbNullString)
AccessibleObjectFromWindow(h, OBJID_CLIENT, IID_IAccessible, objAcc)
Dim child As Object
If objAcc Is Nothing Then
ListBox1.Items.Add("(取得失敗)")
Else
child = objAcc.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF)
Do Until IsNothing(child)
ListBox1.Items.Add(objAcc.accName(child))
child = objAcc.accNavigate(NAVDIR_NEXT, child)
Loop
objAcc = Nothing
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ReDim IID_IAccessible.Data4(7)
With IID_IAccessible
.Data1 = &H618736E0
.Data2 = &H3C3D
.Data3 = &H11CF
.Data4(0) = &H81
.Data4(1) = &HC
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H38
.Data4(6) = &H9B
.Data4(7) = &H71
End With
End Sub
Public Structure UUID
Dim Data1 As Integer
Dim Data2 As Integer
Dim Data3 As Integer
Dim Data4() As Byte
End Structure
Public IID_IAccessible As UUID
Public Const CHILDID_SELF As Integer = 0&
Public Const OBJID_CLIENT As Integer = &HFFFFFFFC
Public Const NAVDIR_MIN = &H0
Public Const NAVDIR_UP = &H0
Public Const NAVDIR_DOWN = &H0
Public Const NAVDIR_LEFT = &H0
Public Const NAVDIR_RIGHT = &H0
Public Const NAVDIR_NEXT = &H0
Public Const NAVDIR_PREVIOUS = &H0
Public Const NAVDIR_FIRSTCHILD = &H0
Public Const NAVDIR_LASTCHILD = &H0
Public Const NAVDIR_MAX = &H0
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
Public Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As Integer, ByVal dwObjectID As Integer, ByRef riid As UUID, ByRef ppvObject As IAccessible) As Integer
よろしくお願いいたします。
ツイート | ![]() |