• ベストアンサー
  • すぐに回答を!

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

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数17982
  • ありがとう数2

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

  • ベストアンサー
  • 回答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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • IEの履歴を消すような操作はしてないのに勝手に消えてしまいます

    IEの履歴を消すような操作はしてないのに勝手に消えてしまいます 昔の様に残す操作の方法を教えてください。 パソコンはWindowsXPでIEはInternetExplorer6です

  • IEを操作

    CreateObject("InternetExplorer.application")を使用しIEを操作しているのですが、IEのウィンドウを2つ以上開いた場合、IEでファイル→新規作成→ウィンドウを選択した時の様に、同じプロセスを使用してしまいます。IEのアイコンを選択してウィンドウを開いた場合の様に、別プロセスで起動する方法を教えてください。宜しくお願いします。

  • VBでブラウザを操作するには?

    ■利用環境 WinXP SP3 VB2008 ExpressEdition IE7 ■質問 VB始めたばかりで初心者です。 VBSで行っていたIEオブジェクトの自動操作をVBのフォーム デザインを使ってビジュアル的に作り変えたいのですが MSDNもろくに読めなくて前に進めません。 VBは、イベント駆動と言うのは、理解しているつもりですが、 CreateObject("InternetExplorer.Application") とブラウザコントロールの違いに戸惑っています。 IEオブジェクトとWebBrowserオブジェクトの使い方の違いの事です。 VBSのIEオブジェクトで行っていた操作は、 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate(URL) IE.document.body.InnerHTML と言う操作をしたいのですが、 できれば、このように私が慣れているIEオブジェクトの操作で ページ表示だけ、VBのブラウザオブジェクトに反映させる事が できれば良いのですが、難しければ、 VBのコントロールのブラウザオブジェクトで これと同じ操作をするにはどうすればよいか 教えて頂けませんでしょうか?

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 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操作 ログインボタンを押せないです

    こんばんは。いつもお世話になっております。 ie操作でうまく行かないので教えてください。 イトーヨーカドーのサイトにログインしたいのですがログインボタンが押下できません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW objIE.Document.forms(0).submit Set objIE = Nothing End Sub --------------------------------------------------------- だと、 「ハイフンを除く7ケタを半角数字でご入力ください」になってしまいます。 ログインボタンが押せてないのかもしれないけど、よくわかりません。 --------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).innerText = "ログイン" Then objIE.Document.Links(i).Click Exit For End If Next i Set objIE = Nothing End Sub --------------------------------------------------------- にすると、 https://www.iy-net.jp/nspc/logininput.do のURLが表示されて会員認証の画面になってしまいます。 だからって objIE.Navigate "https://www.iy-net.jp/" を https://www.iy-net.jp/nspc/logininput.do にして objIE.Document.forms(0).submit すると https://www.iy-net.jp/nspc/searchresult.do のページが表示されて 「再度 TOPページよりログインいただけますようお願い申し上げます。」 になってしまいます。 ログインする方法を教えていただけますか? ご教授よろしくお願いします。

  • VBAでIE操作ができない エラーになる

    vista+オフィス2007です。 エクセルで --------------------------------------------------------- Sub ie_test() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" End Sub --------------------------------------------------------- を実行したいのですができません。 Set objIE = CreateObject("InternetExplorer.Application") の部分で、しばらく固まり、その後 「実行時エラー'-2147467259(80004005)': オートメーションエラーです。 エラーを特定できません」 と表示されてしまいます。 前にvista+オフィス2003の時は 上記のコードで問題なく動作しました。 2007でも動く方法を教えてください。ご回答よろしくお願いします。

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

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

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • VB.NETでIEを起動してそのIEが後から見ても分かるようにしたい

    VB.NETで IE = CreateObject("InternetExplorer.Application") IE.Navigate("http://www.yahoo.co.jp") のようにしてIEを起動して、 その後通常のように手動でページを移動したり 複数のIEを手動で起動したりした場合に どれがこのプログラムで起動したIEかを ウインドウを見ただけで分かるようにしたいのですが、 何か方法はあるでしょうか? ウィンドウタイトルの文字で HTMLのページタイトルの横のMicrosoft Internet Explorerなどを 自分の自由に設定できればと思うのですが、 そういうことができたら教えて頂きたいです。 よろしくおねがいします。

  • ie操作 ボタンが押せる時と押せない時がある

    こんばんは。よろしくお願いします。 ie操作でボタンが押せる時と押せない時があるのですが、 違いがわかりません。 --------------------------------------------------------- Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.mitsui-direct.co.jp/customer/" 'ダイレクトにログインページへはいけない。 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "javascript:gotoMyhp();" Set objIE = Nothing End Sub --------------------------------------------------------- これなのですが、http://www.mitsui-direct.co.jp/customer/のサイトへいって、 右側の「Myホームページログイン」を押したいのですが、 最初は、objIE.Navigate "javascript:gotoMyhp();" でうまくいってたのですが、 なぜか出来なくなってしまいました。 そんな事ありますか? コードが間違ってるのでしょうか? ご教授よろしくお願いします。

  • UWSCでIE操作。IEを選択する方法について

    UWSCでIEを開き、その後の操作も大体分かるのですが、 IEを開いたときに、IEが選択されるときと、選択されないときが あります。選択されるときは問題なく動作するのですが、 選択されない場合は、KBD(VK_ENTER,CLICK,###)などのタグが動作しなくなります。 ※以下、IEを動作するときに使用しているソースです。 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = true IE.navigate(URL) sleep(0.5) REPEAT sleep(0.5) UNTIL !IE.busy AND IE.readystate = 4 このときに、開いたIEを確実に選択し、動作させるような方法はありませんでしょうか?

  • エクセル VBA で IE操作 

    エクセルVBAにて IEを操作し リンクをクリックするには どのような記述になりますでしょうか? たとえば http://okwave.jp/mypage へアクセスし画面右上 カテゴリ をクリック 次に Excel(エクセル) をクリック という具合に 画面に表示されている文字を順番にクリックしたいです。 マクロを見つけてきましたが クリックというのはどう記述していいやらさっぱりです。 Sub testIE() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate "http://okwave.jp/mypage" 'IEでURLを開く Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち DoEvents Loop

  • 過去のIE

    今回、XPにInternetExplorer7を入れました。 それで、今までのIEをいろいろ調べてみたくなったので、今、過去のIEをダウンロードできるところを探しています。 XPでできないのは分かっていますが、趣味で集めてみたいのです。 ぜひ、過去のIEをダウンロードできるところを、教えてください! 【現在集めたもの】 5.5 6.0 7.0

専門家に質問してみよう