VB6でwebページのURLを取得するには


FOW  2007-12-03 09:38:53  No: 138265  IP: 192.*.*.*

お世話になっています。
FOWといいます。

早速質問なのですが
現在開いているWebページのアドレスを
フォーム上にあるコマンドボタンをクリックしたら
テキストボックスに表示させる
というプログラムを作成したいのですが
どのような処理、参照をさせればよろしいのでしょうか?
よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2007-12-03 12:05:43  No: 138266  IP: 192.*.*.*

質問の内容が、VB6 の DHTML アプリケーション プロジェクトを意味するなら、
  Private Function Button1_onclick() As Boolean
    TextField1.Value = DHTMLPage.BaseWindow.Document.url
  End Function
という感じで、テキストに URL を代入できるかと。


VB6 の IIS アプリケーション プロジェクトの場合は、クライアント スクリプトを埋め込んで
  Private Sub WebItem1_MyCustomEvent()
    Response.Write "<input type=text id=Text1 size=300>"
    Response.Write "<input type=button value=URL"
    Response.Write " onclick='Text1.value=document.location.href'>"
  End Sub
などとした方が良いかと思いますが、もし、サーバサイドのコードで実装するのであれば、
  Private Sub WebItem1_Respond()
    Response.Write "<input value='"
    Response.Write WebClass.Request.ServerVariables("SCRIPT_NAME")
    Response.Write "' size=30>"
  End Sub
という感じで。


WebBrowser コントロールや InternetExplorer オブジェクトの場合、
> フォーム上にあるコマンドボタンをクリックしたら
> テキストボックスに表示させる
というのが、「VB6 フォーム上のボタン/テキスト」という意味であれば、
  Private Sub Command1_Click()
    Text1.Text = browser.LocationURL
  End Sub
という感じになりますし、「Web フォーム上のボタン/テキスト」という
意味であれば、ページにもよりますが、たとえばこうかな。


'MSHTML.TLB を参照設定
Option Explicit

Private WithEvents oForm As MSHTML.HTMLFormElement
Private WithEvents oText As MSHTML.HTMLInputElement
Private WithEvents oButton As MSHTML.HTMLInputButtonElement

Private Function oForm_onsubmit() As Boolean
    oForm_onsubmit = False
    oText.Value = WebBrowser1.LocationURL
End Function
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set oForm = WebBrowser1.document.Forms(0)
    Set oText = oForm("WORD")
    oText.previousSibling.nodeValue = "サンプル"
    oText.nextSibling.nodeValue = "に"
    oText.Width = 300
    Set oButton = oForm(1)
    oButton.Value = "URL取得"
End Sub
Private Sub Form_Load()
    WebBrowser1.Navigate2 "http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi"
End Sub

編集 削除
FOW  2007-12-03 15:32:41  No: 138267  IP: 192.*.*.*

魔界の仮面弁士さんありがとうございます。

説明が足らず申し訳ありませんでした。
私がやりたかったことは
「VB6 フォーム上のボタン/テキスト」なので
  Private Sub Command1_Click()
    Text1.Text = browser.LocationURL
  End Sub
これでした。
他のやり方も説明していただきありがとうございます。

さらに質問なのですが
browser.LocationURLの「browser」はオブジェクトですよね?
これの宣言は
Dim browser As Object
でよろしいのでしょうか?

編集 削除
通ってみた  2007-12-04 05:25:53  No: 138268  IP: 192.*.*.*

>WebBrowser コントロールや InternetExplorer オブジェクトの場合、

編集 削除
FOW  2007-12-06 18:07:38  No: 138269  IP: 192.*.*.*

通ってみたさん
返信遅れましてすいません。

ご指摘ありがとうございました。

自分で調べてみたところ
WebBrowser コントロールや InternetExplorer オブジェクトは
VBでブラウザを作る時につかうものと解釈しましたがいかがでしょうか?

魔界の仮面弁士さん、説明がものすごく足りなくてもうしわけありませんでした。

えっと、やろうとしたことは
1、すでにInternetExplorer(ブラウザ)は立ち上がっていて
    某サイトを表示している
2、作成したexeファイルを起動させる
3、VBフォーム上のボタンをクリックしたらフォーム上のテキストボックス    にInternetExplorerで表示されているサイトのURLが表示される
という流れです。

この場合でもWebBrowser コントロールや InternetExplorer オブジェクト
を使用すればいいのでしょうか?

質問ばかりですいませんがよろしくお願いします。

編集 削除
スクリプトプログラマ  2007-12-06 20:17:28  No: 138270  IP: 192.*.*.*

Text1.Text = CreateObject("Shell.Application").Windows().Item().LocationURL
となります。

編集 削除
スクリプトプログラマ  2007-12-06 20:22:14  No: 138271  IP: 192.*.*.*

補足
>2、作成したexeファイルを起動させる
をエクスプローラからやると駄目です。
>1、すでにInternetExplorer(ブラウザ)は立ち上がっていて
のお気に入りやリンクなどから起動します。

編集 削除
魔界の仮面弁士  2007-12-07 09:11:11  No: 138272  IP: 192.*.*.*

これでどうかな。

Dim browser As Object
For Each browser In CreateObject("Shell.Application").Windows()
    If TypeName(browser.document) Like "*HTMLDocument*" Then
        Debug.Print browser.LocationURL
    End If
Next

編集 削除
スクリプトプログラマ  2007-12-08 17:28:36  No: 138273  IP: 192.*.*.*

魔界の仮面弁士さん、
If TypeName(browser.document) Like "*HTMLDocument*" Then
と書いているのは
If TypeName(ie.Document)="HTMLDocument" Then
では、うまく行かないケースがあるということですね?
私はまだそういうケースに遭遇したことがないのですが、
どういうときにどうなるのでしょう?

編集 削除
FOW  2007-12-11 16:13:17  No: 138274  IP: 192.*.*.*

スクリプトプログラマさん
魔界の仮面弁士さん

返信遅れて申し訳ありませんでした。
足りない頭で四苦八苦してたら余計に解らなくなってしまいました・・・。
参考書を読んで一応解った事が既に保存したURLならブラウザで表示が可能なんだなという程度だけでした。

で、えっとスクリプトプログラマさんの
Text1.Text = CreateObject("Shell.Application").Windows().Item().LocationURL
はexeファイルをお気に入りやリンクなどに置いて(保存?)そこから起動させるということですよね?
実行してもそのexeファイルまでの絶対パスがでてくるだけなのですが・・・。

魔界の仮面弁士さんが提供してくださったコードも
Dim browser As Object
For Each browser In CreateObject("Shell.Application").Windows()
    If TypeName(browser.document) Like "*HTMLDocument*" Then
        Debug.Print browser.LocationURL
    End If
Next
Debug.Print browser.LocationURLにおいてなにも表示されない=このコードをちゃんと理解できていないのが現状です。
本来ならbrowser.LocationURLでURLが取得されているはずだと思うのですがどこのURLを取得するの???と常に頭の中で疑問符が出ています。

申し訳ありませんが、
Dim browser As Object
For Each browser In CreateObject("Shell.Application").Windows()
    If TypeName(browser.document) Like "*HTMLDocument*" Then
        Debug.Print browser.LocationURL
    End If
Next
の動きを教えてもらえますでしょうか?
よろしくお願いします。

編集 削除