- ベストアンサー
IE9のダウンロード通知バーのVBからの操作
IE9(Internet Explorer 9)でのファイルダウンロード時に表示される「通知バー」をVBAを利用して操作(ダウンロードボタンの押下)を行いたいと考えています。 http://okwave.jp/qa/q8035721.html こちらの質問を参考にして、自分の環境がWindows8 Office 2010 standard 64-bitなので、API宣言部分を変更するなどしてみたのですが、構文エラーとなってしまいます。 どなたか上記の記事のコードを64-bit版でも稼動する方法をご教示頂けないでしょうか
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
取り合えず --- 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)
(保存ボタンを押下までの)最初のコードは > h = objIE.Hwnd IEの参照をセットして、Hwndプロパティを呼び出しています。 (ダウンロード終了待ちを行なって閉じるまで)次のコードは、 > Const url As String = "" 適宜、URLを指定してください。 > 他に不足しているライブラリ 特にありません。 以上
- kumatti1
- ベストアンサー率60% (73/121)
こんな感じで。 --- 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
補足
神速なご回答、ありがとうございます! ご教示頂いたコードを実行したところ、コンパイルエラー(ユーザー定義型は定義されていません)が出ました。 コメントアウトに入れて頂いた「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
お礼
ありがとうございます。 まだコンパイルエラーが出る状態ですが、ここまでご教示頂いたので、あとは自力解決します。 ご丁寧にありがとうございました!