IE操作時、ファイルのダウンロードボタンの押下

IEをvb.netから操作しています。 webからファイルのダウンロードを自動で行いたいのですが、どのようにすればいいの...

sa104fkd さんからの 回答

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

  • 2013/05/07 13:03
  • 回答No.2
  • ベストアンサー
sa104fkd

ベストアンサー率 100% (1/1)

Windows7 IE9ですが、↓で動きました

Private Delegate Function D_EnumChildWindowsProc(ByVal hWnd As IntPtr, ByVal lParam As IntPtr) As IntPtr

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As IntPtr, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr

Private Const WM_ACTIVATE = &H6
Private Const BM_CLICK = &HF5
Private Const WM_GETTEXT = &HD
Private Const WM_QUIT = &H10

Private Const NAVDIR_NEXT = &H5
Private Const NAVDIR_FIRSTCHILD = &H7
Private Const CHILDID_SELF = &H0
Private Const OBJID_CLIENT = &HFFFFFFFC

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As IntPtr, ByVal dwId As IntPtr, _
ByRef riid As Guid, <MarshalAs(UnmanagedType.IUnknown)> ByRef ppvObject As Object) As IntPtr
Declare Function AccessibleChildren Lib "oleacc" _
(ByVal paccContainer As IAccessible, ByVal iChildStart As IntPtr,
ByVal cChildren As IntPtr, <[Out]()> ByVal rgvarChildren() As Object, ByRef pcObtained As IntPtr) As IntPtr

Private IID_IAccessible As Guid = New Guid(&H20400, 0, 0, {&HC0, 0, 0, 0, 0, 0, 0, &H46})

Sub FileDownLoad_Proc()
Dim strCaption As String
Dim PWnd As IntPtr
Dim cWnd As IntPtr

' 親ウィンドウ取得
strCaption = "○○○○ - Windows Internet Explorer"
While PWnd = 0
PWnd = FindWindowEx(0, 0, "IEFrame", strCaption)
System.Threading.Thread.Sleep(50)
End While

' 通知バーのハンドル
While cWnd = 0
cWnd = FindWindowEx(PWnd, 0&, "Frame Notification Bar", vbNullString)
System.Threading.Thread.Sleep(50)
End While

' 通知バーボタン群のハンドル
Dim hChild As IntPtr = FindWindowEx(cWnd, 0&, "DirectUIHWND", vbNullString)
Dim objAcc As IAccessible = Nothing

AccessibleObjectFromWindow(hChild, OBJID_CLIENT, IID_IAccessible, objAcc)

If Not IsNothing(objAcc) Then
ClickPreserve(objAcc)
While cWnd = 0
cWnd = FindWindowEx(PWnd, 0&, "Frame Notification Bar", vbNullString)
System.Threading.Thread.Sleep(50)
End While
SendMessage(cWnd, WM_QUIT, 0, 0&)

End If

End Sub
Private Sub ClickPreserve(ByVal acc As IAccessible)

Dim i As Long
Dim count = acc.accChildCount
Dim lst(count - 1) As Object

If count > 0 Then
AccessibleChildren(acc, 0, count, lst, 0)
If Not IsNothing(lst) Then
For i = LBound(lst) To UBound(lst)
With lst(i)
'On Error Resume Next
'Debug.Print("ChildCount: " & .accChildCount)
'Debug.Print("Value: " & .accValue(CHILDID_SELF))
'Debug.Print("Name: " & .accName(CHILDID_SELF))
'Debug.Print("Description: " & .accDescription(CHILDID_SELF))
'On Error GoTo 0
'保存ボタンを見つけたらクリック(デフォルトアクション)する
If .accName(CHILDID_SELF) = "保存" Then

System.Threading.Thread.Sleep(500)
.accDoDefaultAction(CHILDID_SELF)
System.Threading.Thread.Sleep(500)
End If
End With
ClickPreserve(lst(i)) '再帰
Next
End If
End If
End Sub
お礼コメント
stolichnaya

お礼率 18% (151/805)

ぬおーー!!ありがとうございます!

ちょっと私には難解な感じですが、とりあえず頑張って読み解いてみます。
ありがとうございました!
投稿日時:2013/05/08 14:03
この回答にこう思った!同じようなことあった!感想や体験を書こう!
この回答にはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
  • IEでCSVファイルのダウンロードをしたい Visual Basic

    いつもお世話になっております。 VBAでWebサイトからCSVファイルをダウンロードしたいと思っております。 VBAを使わずに手動でダウンロードするときには、ボタンをクリックするとポップアップ画面が表示され、「開く」または「保存」のボタンを押してダウンロードします。 VBAでボタンを押すコードを以下のようにしました。 objIE.Document.Forms("frmParam").btnExport.Click (* btnExport=Webのソース画面に表示してあったダウンロードボタンの名前) これだと 「セキュリティ保護のため、このサイトによるこのコンピュータへのファイルのダウンロードが Internet Explorer によりブロックされました。オプションを表示するには、ここをクリックしてください」 という情報バーが画面の上部に表示されプログラムがストップしてしまいます。(オプションを手動で表示させ、「ファイルのダウンロード」を選択しても何も起こらず、プログラムは実行中のままです。) どのようにしたらうまくダウンロードできますでしょうか?...

  • VB6 IEのファイルダウンロード情報 Visual Basic

    VB6にて、IEの名前を付けて保存にてファイルをダウンロードした際、完了時に実際に保存したファイル名と、保存先のフォルダパスを取得することは可能でしょうか。 ダウンロードしたファイルを、VB6のプログラムで変換取込したいと考えています。 VB6からCreateObjectにてIEを起動し、監視することで可能かと考えたのですが、「DownloadComplete」イベント等はファイル名と実際の保存先を指定する前に発生したりしてうまくいきませんでした。 ご存知の方いらっしゃいましたらよろしくお願いいたします。 環境:WindowsXP Pro InternetExplorer8 VisualBasic6.0 SP6 下記サンプル  参照設定にて、「shdocvw.dll」(Microsoft Internet Controls)を追加 Dim WithEvents objIE As InternetExplorer Private Sub form_Load() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=7b9ba261-7a9c-43e7-9117-f673077ffb3c" End Sub サイトのダウンロードボタンを押して、名前を変更したりしてダウンロードを行い、完了後、その名前と保存先のフォルダパスが取得したいです。 実際には上記のサイトではなく、条件を指定してダウンロードを開始するのでVB上から直接ダウンロードを行う等はできません。 よろしくお願いいたします。...

  • IEでダウンロードしようとすると「指定されたファイルに対してこの操作を... Windows XP

    IE7をアンインストールしてIE6に戻してから「指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。[フォルダオプション]コントロールパネルでプログラムを関連付けてください」というアラートが頻繁に出現するようになりました。 PCを立ち上げたばかりで何も操作していないときでも同じアラートが出現します。 そして、またIE7に戻そうと思って公式サイトからIE7をダウンロードしようと思い、ダウンロードボタンを押したところ同じアラートが出てきてダウンロードできませんでした。 IE6に戻す前にFirefox3をダウンロードしたのでもしかすると関連があるのかもしれません。 一応htmlとhtmがInternet Explorerに関連付けられているか確認したところFirefoxに関連付けられていたのでIEに戻したのですが症状は変わりません。 以下は今のところのアラート出現条件 ・IE6で何かをダウンロードしようとしたとき(DL不可) ・IE6のyahooツールバーを使用しようとしたとき(使用不可) ・操作していない状態 以上です。IE6自体は起動可能で上記以外の操作は可能です。 OSはWindows XPです、よろしくお願いします。...

  • VBSCRIPT + WSHで WEBからのファイルをダウンロード その他(プログラミング・開発)

    こんにちは。 下記の様なスクリプトを作りたいのですが、どなたかいいアイデアはないでしょうか。 [やりたいこと] WEBを巡回し、条件にあてはまるファイル(PDFやmp3など)をダウンロードする。 (VBS+WSHで) 今はInternetExplorer.Application で巡回してソースからファイル名を見つけ、それをCUI版Gethtml等のソフトで落としたりしています。 ただ、ページにJavaScriptなんかがつかってあったりすると、うまくいきません。 また、ページを巡回した後にキャッシュから手作業でファイルを拾ってくる方法も試したのですが、せっかく途中まで自動化しても手作業が入ってしまうところがいまいちです。 InternetExplorer.Application で巡回して直接ファイルを任意のフォルダにダウンロードする方法をご存知の方、教えていただけませんか。...

  • ファイルのダウンロードにかんして その他(インターネット・Webサービス)

    最近ファイルがうまくダウンロードできないようです。 ブラウザはインターネットエクスプローラの最新版を使用しています。 具体的にはサイトでダウンロードボタンを押しても0%から進行しなかったりします。 実例では最近ワコムのタブレットドライバが結果的にタイムアウトでダウンロードできませんでした。 何か解決法はないでしょうか?...

ページ先頭へ