• ベストアンサー

IE9のダウンロード通知バーのVBからの操作

IE9(Internet Explorer 9)でのファイルダウンロード時に表示される「通知バー」をVBAを利用して操作(ダウンロードボタンの押下)を行いたいと考えています。 http://okwave.jp/qa/q8035721.html こちらの質問を参考にして、自分の環境がWindows8 Office 2010 standard 64-bitなので、API宣言部分を変更するなどしてみたのですが、構文エラーとなってしまいます。 どなたか上記の記事のコードを64-bit版でも稼動する方法をご教示頂けないでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

取り合えず --- Option Explicit '参照設定 UIAutomationClient 'C:\Windows\System32\UIAutomationCore.dll Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr Sub hoge2() Const url As String = "" Dim ie As Object Set ie = CreateObject("Shell.Application").Windows.findwindowSW(url, Empty, 1, 0, 1) If ie Is Nothing Then Exit Sub Dim o As IUIAutomation2 Dim e As IUIAutomationElement Set o = New CUIAutomation8 Dim h As LongPtr h = ie.Hwnd h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString) If h = 0 Then Exit Sub Set e = o.ElementFromHandle(ByVal h) Dim iCnd As IUIAutomationCondition Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "保存") Dim Button As IUIAutomationElement Set Button = e.FindFirst(TreeScope_Subtree, iCnd) Dim InvokePattern As IUIAutomationInvokePattern Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId) InvokePattern.Invoke DoEvents Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "通知バーのテキスト") Dim iElemFound As IUIAutomationElement Set iElemFound = e.FindFirst(TreeScope_Subtree, iCnd) Dim iValuePattern As IUIAutomationValuePattern Set iValuePattern = iElemFound.GetCurrentPattern(UIA_ValuePatternId) Do DoEvents If iValuePattern.CurrentValue Like "*のダウンロードが完了しました。*" Then Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "閉じる") Set iElemFound = e.FindFirst(TreeScope_Subtree, iCnd) Set InvokePattern = iElemFound.GetCurrentPattern(UIA_InvokePatternId) InvokePattern.Invoke Exit Do End If Loop End Sub

その他の回答 (2)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

(保存ボタンを押下までの)最初のコードは > h = objIE.Hwnd IEの参照をセットして、Hwndプロパティを呼び出しています。 (ダウンロード終了待ちを行なって閉じるまで)次のコードは、 > Const url As String = "" 適宜、URLを指定してください。 > 他に不足しているライブラリ 特にありません。 以上

f1800776
質問者

お礼

ありがとうございます。 まだコンパイルエラーが出る状態ですが、ここまでご教示頂いたので、あとは自力解決します。 ご丁寧にありがとうございました!

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

こんな感じで。 --- Option Explicit '参照設定 UIAutomationClient 'C:\Windows\System32\UIAutomationCore.dll Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr Sub hoge() Dim o As IUIAutomation2 Dim e As IUIAutomationElement Set o = New CUIAutomation8 Dim h As LongPtr h = objIE.Hwnd h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString) If h = 0 Then Exit Sub Set e = o.ElementFromHandle(ByVal h) Dim iCnd As IUIAutomationCondition Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "保存") Dim Button As IUIAutomationElement Set Button = e.FindFirst(TreeScope_Subtree, iCnd) Dim InvokePattern As IUIAutomationInvokePattern Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId) InvokePattern.Invoke End Sub

f1800776
質問者

補足

神速なご回答、ありがとうございます! ご教示頂いたコードを実行したところ、コンパイルエラー(ユーザー定義型は定義されていません)が出ました。 コメントアウトに入れて頂いた「UIAutomationClient」の参照設定も行ったのですが、他に不足しているライブラリはありますでしょうか。現在設定されているものは下記のとおりです(念のため、通常のダイアログからではなくVBProject.Referencesプロパティから調べました)。 VBA Visual Basic For Applications Excel Microsoft Excel 14.0 Object Library stdole OLE Automation Office Microsoft Office 14.0 Object Library UIAutomationClient