解決済み

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

  • 困ってます
  • 質問No.8121989
  • 閲覧数27486
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 33% (1/3)

IE9(Internet Explorer 9)でのファイルダウンロード時に表示される「通知バー」をVBAを利用して操作(ダウンロードボタンの押下)を行いたいと考えています。

http://okwave.jp/qa/q8035721.html

こちらの質問を参考にして、自分の環境がWindows8 Office 2010 standard 64-bitなので、API宣言部分を変更するなどしてみたのですが、構文エラーとなってしまいます。

どなたか上記の記事のコードを64-bit版でも稼動する方法をご教示頂けないでしょうか

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

  • 回答No.2

ベストアンサー率 60% (73/120)

取り合えず
---
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件)

  • 回答No.3

ベストアンサー率 60% (73/120)

(保存ボタンを押下までの)最初のコードは
> h = objIE.Hwnd
IEの参照をセットして、Hwndプロパティを呼び出しています。

(ダウンロード終了待ちを行なって閉じるまで)次のコードは、
> Const url As String = ""
適宜、URLを指定してください。

> 他に不足しているライブラリ
特にありません。

以上
お礼コメント
f1800776

お礼率 33% (1/3)

ありがとうございます。

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

ご丁寧にありがとうございました!
投稿日時 - 2013-06-08 17:52:42
  • 回答No.1

ベストアンサー率 60% (73/120)

こんな感じで。
---
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

お礼率 33% (1/3)

神速なご回答、ありがとうございます!

ご教示頂いたコードを実行したところ、コンパイルエラー(ユーザー定義型は定義されていません)が出ました。

コメントアウトに入れて頂いた「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
投稿日時 - 2013-06-07 10:53:29
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ