VBでYouTubeの再生ボタンを押すには


にょい君  2008-10-14 11:25:30  No: 140658

大変お世話になっております。

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

よろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加