• ベストアンサー

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

IEをvb.netから操作しています。 webからファイルのダウンロードを自動で行いたいのですが、どのようにすればいいのかわからず悩んでいます。 画像の赤枠で括ってあるボタンの押下を、vb.netからの操作で行いたいのですが、どのようにすれば良いでしょうか。 InternetExplorer.Applicationに何らかのメンバ関数のようなものがあるのか、sendkeysを使うしかないのか、sendkeysを使うなら、具体的にどのキー操作を送れば良いのかなど、お教えいただけないでしょうか。 よろしくお願いします!

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

  • ベストアンサー
  • sa104fkd
  • ベストアンサー率100% (1/1)
回答No.2

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
質問者

お礼

ぬおーー!!ありがとうございます! ちょっと私には難解な感じですが、とりあえず頑張って読み解いてみます。 ありがとうございました!

その他の回答 (1)

回答No.1

それね、なかなか簡単に押せないんだよー。 俺も自動的にダウンロードするアプリを仕事で作ることになったんだけどVBAで簡単に作ろうと思ったらそこで引っかかった。 諦めてWebClient使って直接ファイルをダウンロードすることにしたよ。 参考になるかわからないけど過去に同じような質問あったよ。 http://okwave.jp/qa/q1809850.html

関連するQ&A

  • Web Browserに表示したWebページのボタンを押下したい[VBA]

    こんにちは。 Web Browserで、表示したWebページ上のボタンを押下したいと思っています。 どのようにプログラミングすればよいのか教えて下さい。 下記のように、組んでみたのですがダメでした。     ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ 'WebブラウザにHPを表示する ActiveXコントロール0.Navigate ("http://~) 'Webブラウザが終わるまで待つ Do Until ActiveXコントロール0.Busy = False DoEvents Loop 'Webブラウザにフォーカスをあてる ActiveXコントロール0.SetFocus '既定のボタンのフォーカスを移動する SendKeys "{TAB}" 'エンターキーを押下する SendKeys "{ENTER}     ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ボタンにフォーカスを移動するまでは、できたんですが、 エンターキー押下では、ボタンをクリックしたことにならないようです。 IEでは、エンターキーでボタンクリックできるですが、 Web Browserではダメなんでしょうか・・・? ACCESS2000を使用しています。 なにかボタンを押下する方法を教えて下さい。 よろしくお願いします。

  • IEでwordを開いた時編集ボタンが押下出来ない

    ワード文書(.doc)をIEにドラッグ&ドロップすると IEの中でwordが立ち上がると思いますが ツールバーの編集・表示・挿入・書式・ツール・罫線などのボタンが 押下出来ない状態となっています。 ※ファイル、移動、お気に入り、ヘルプのボタンは押下できます。 以前は押下できていたので、調査した所、IE6 SP2であれば ボタン押下が出来る事が分かりました。 -端末の環境- windows XP SP3 IE6 SP3 word2000 or 2003 or 2007 ※端末にインストールされているwordのバージョンには  依存しないのではないかと思っております。 IE or Wordの設定又はレジストリ等を操作してボタンが 押下出来る様にならないかと思っていますが 良い方法は無いものでしょうか。 端末数が多く、IEの再インストール(SP2に戻す)は困難な状況です。

  • ゲームパッドのボタンの押下をコードで実現

    キーボードの押下をコードで実現する方法として、sendkeys関数がありますが、ゲームパッドのボタンの押下をコードで実現するにはどのようにしたらいいのでしょうか? というのも、ゲームパッドにしか対応していないゲームをキーボード対応にしたいのですが、そのようなことはできるのでしょうか? キーボードにしか対応していないゲームをゲームパッド対応にするためのソフトならフリーソフトでたくさん出ているのですが、その逆のことをするためのソフトが見つからず困っています。 よろしくお願い致します。

  • コマンドボタンをキーボードで操作

    こんにちわ。 VBでコマンドボタンをマウスでクリックするのと 同じ動きをAltキーと何かのアルファベットキーを押下して 実現する機能があったと思います。 たとえば[開く(O)]など… このようなボタン(機能?)を何と言うのでしょうか? 教えてください。

  • VB.NET ボタン押下で一つ前のコントロールへ

    お世話になります。 VisualStudio2010 InputMan6.0 上記を使用して、VB.NETで開発をしております。 いくつかテキスト・コンボコントロールが並んでいるFormで、ボタンを押下することで それまでカーソルがあったコントロールの一つ前のTabIndexがあるコントロールへ カーソルを遷移させたいのですが、うまく動きません。 SelectNextControlを使ってみても、ボタン押下の段階でボタンがActiveなコントロールと なってしまうため、ボタンの一つ前のコントロールにカーソルが移動してしまいます。 うまい方法はないでしょうか?

  • VBA IEを操作。ファイルダウンロード

    IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • IE操作の際表示ページのキャシュを保存させたくない。

    VBやVBSなど、 InternetExplorer.Applicationオブジェクトを 使ってIEを操作して、WEBページを巡回する際。 ページのキャシュが貯まって処理が重くなるようなのですが。 処理中のキャシュを無効にする方法はありませんでしょうか? ■参考 CPUの使用率やメモリは充分空きがあるのに ハードディスクの空き容量を用意していないため。 処理が重くなるようです。

  • IE8 ファイルダウンロード時 実行できない

    こんにちは。 Windows7 professional IE8 の環境にて御質問が御座います。 windowsXP (IE8)では、ネット上からファイルをダウンロードする際に子画面が表示されます。 その子画面にて、ダウンロードファイルを下記のボタン操作から 選択できます。  開く、保存、キャンセル これが、windows7 IE8 だと  検索(web上から検索)、保存、キャンセル となってしまいます。  この「検索ボタン」を今まで通り、「開く」にしたいのですが  どのような設定をすれば良いのでしょうか。    一通りネット上を探したのですが、該当の症状が見つからなく・・・。 以上、宜しくお願い致します。  P.S  ちなみに、ダウンロードファイルは拡張子が不明のものです。  開くボタンから、自分でファイル実行するソフトを選びたく。

  • VBでIEのメニューバーの操作法をご教示ください

    VBでIEを起動し何回かページを移動して表示しています。その時、IEのメニューバーの「ファイル(F)」ボタンやその「ファイル(F)」ボタン押下によるブルダウン中の「印刷(P)」ボタンを押下する方法をご教示して頂きたくお願いします。

専門家に質問してみよう