VBの命令から、ブラウザの更新ボタンを制御するには?


KURO  2004-02-04 20:31:46  No: 81819  IP: [192.*.*.*]

VBで既存のブラウザ(私はIEですが)の更新を制御するにはどうすればいいのでしょう?
F5ボタンの命令をブラウザに送ることができればいいのですが、その仕方もわかりません。
ちなみにVBは6.0か.NETのどちらでもかまいません。
よろしくお願いします。

編集    削除
魔界の仮面弁士  2004-02-04 22:29:02  No: 81820  IP: [192.*.*.*]

IE固定で良ければ、Refresh2メソッドを呼び出せばOKです。

ただ、「既存のブラウザ」全てに対応させるのは無理かと思います。
全てのブラウザが、F5で更新されるようになっているという保証は無いですし、
そもそも、更新ボタンが無いブラウザもあるかもしれませんし。

# まぁ、ほとんどのブラウザは、更新ボタンぐらいは持っていますけれどね。

編集    削除
KURO  2004-02-07 20:52:19  No: 81821  IP: [192.*.*.*]

実際にRefreshメソッドを利用して作ってみました。
現在一定時間ごとにブラウザを更新するプログラムを作成したいのですが、ブラウザを開いた後。

Private Sub Timer1_Timer()
Set Win = Wscript.CreateObject("Shell.Application")
Set IE = Wscript.CreateObject("InternetExplorer.Application", "IE_")
Refresh2 = (REFRESH_NORMAL)
End Sub

このようなプログラムを書いて実行してみたのですがオブジェクトが必要ですというエラーメッセージが出ます。
オブジェクトとは具体的に何が足りないのでしょうか?
ちなみにブラウザはIE6.0です

編集    削除
魔界の仮面弁士  2004-02-08 00:57:38  No: 81822  IP: [192.*.*.*]

> Set Win = Wscript.CreateObject("Shell.Application")
そのコードは、VBScript用の記述ですよ。
WScriptオブジェクトはVBからは利用できません。

VB6のCreateObject関数が、WScript.CreateObjectメソッドに近い機能を
持っていますので、そちらで代用してください。

> Set IE = Wscript.CreateObject("InternetExplorer.Application", "IE_")
これもVBScriptの記述ですよね。VBScriptは、CreateObjectの第2引数を使ってイベントプロシージャ名を決定しますが、VBは「WithEventsキーワード」を使って宣言した変数によって、イベントを受け取ります。

それと、「既に起動しているIEを制御したい」のか、それとも「プログラムからIEを起動し、そのIEを制御したい」のかによってもコーディングに差がでます。(今回の場合は、どちらをお望みですか?)

> Refresh2 = (REFRESH_NORMAL)
「Refresh2という変数に、REFRESH_NORMALという値を代入する」のではなく、
「InternetExplorerオブジェクトのRefresh2メソッドを呼び出す」ようにしてみてください。

編集    削除
KURO  2004-02-08 06:30:51  No: 81823  IP: [192.*.*.*]

VBScriptだったのですか。
今回は2つのコマンドボタンを用意して一つ目のボタンでIEを起動して2つ目のボタンで更新という具合の処理をしたいんです。

編集    削除
魔界の仮面弁士  2004-02-08 09:30:07  No: 81824  IP: [192.*.*.*]

> VBScriptだったのですか。
あ、ご自身で考えられたコードではなかったのですか。
(VBScriptに慣れていて、VB6/VB.NETに慣れていない方なのかと思っていました)

> 今回は2つのコマンドボタンを用意して一つ目のボタンでIEを起動して2つ目のボタンで更新という具合の処理をしたいんです。
やり方は幾つかあるでしょうが、例えばこんな感じで如何でしょう。

'-----------------------------------------------
Option Explicit
Private IE As Object   'As InternetExplorer
Private Sub Command1_Click(Index As Integer)
    If Index = 0 Then
        Set IE = CreateObject("InternetExplorer.Application")
        IE.Navigate2 "http://www.google.co.jp/"
        IE.Visible = True
    Else
        IE.Refresh2
    End If
End Sub
'-----------------------------------------------
Option Explicit On 
Option Strict On
Public Class Form1
    Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
    Private IE As Object
    Private Sub Button_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs _
    ) Handles Button1.Click, Button2.Click
        If sender Is Me.Button1 Then
            IE = CreateObject("InternetExplorer.Application")
            CallByName(IE, "Navigate2", CallType.Method, "http://www.google.co.jp/")
            CallByName(IE, "Visible", CallType.Let, True)
        Else
            CallByName(IE, "Refresh2", CallType.Method)
        End If
    End Sub
End Class
'-----------------------------------------------

厳密には、Refresh2メソッドを呼べる状態かどうかを調べたり、
IEがユーザーによって閉じられたかどうかなどを調べる必要もありますが、
基本的には、上記のような感じになるかと思います。

編集    削除
KURO  URL  2004-02-08 21:17:13  No: 81825  IP: [192.*.*.*]

あのプログラムはサンプルプログラムを参考にして作ってみたんです。
実際に魔界の仮面弁士さんがおっしゃったとおりにやってみたところブラウザが開き指定のページが開きました。
そして更新のほうなのですが、後ろのほうの
Option Explicit On 
Option Strict On
Public Class Form1
    Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
    Private IE As Object
    Private Sub Button_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs _
    ) Handles Button1.Click, Button2.Click
        If sender Is Me.Button1 Then
            IE = CreateObject("InternetExplorer.Application")
            CallByName(IE, "Navigate2", CallType.Method, "http://www.google.co.jp/")
            CallByName(IE, "Visible", CallType.Let, True)
        Else
            CallByName(IE, "Refresh2", CallType.Method)
        End If
    End Sub
End Class
このプログラムはどの部分に記述すればよろしいでしょうか?
初心者ですみませんm(_  _)m
いつも丁寧なご説明ありがとうございます。本当に感謝しております。

編集    削除