現在開いているIEのアドレスを取得するには?

解決


あげ  2004-03-06 11:13:09  No: 112220  IP: [192.*.*.*]

複数開いているIEのアドレスをListboxに登録するには、どうしたらよいでしょうか?
使用環境はWinXP、VB6(SP6)、IE6です。
よろしく、お願いします。

編集 削除
魔界の仮面弁士  2004-03-06 15:19:08  No: 112221  IP: [192.*.*.*]

ShellWindowsコレクションを使えば、起動されている
InternetExplorerオブジェクトを列挙することができます。

あとは、InternetExplorerオブジェクトのLocationURLプロパティで、
アドレスを取得することができるかと。

編集 削除
あげ  2004-03-06 17:27:35  No: 112222  IP: [192.*.*.*]

魔界の仮面弁士さま、ご返答ありがとうございます。
ShellWindowsコレクションについてですが、使用方法がわからず困っております。
ネットで調べても、いまひとつ理解できません。

よろしく、お願いします。

編集 削除
あげ  2004-03-08 13:08:40  No: 112223  IP: [192.*.*.*]

ShellWindowsについてですが、

  Dim objShellWindows As ShellWindows
  Set objShellWindows = New ShellWindows

として、ShellWindowsオブジェクトを生成しようとしましたが、
”クラスはオートメーションをサポートしていません。(Error 430)”
という、エラーが発生しました。

文法が悪いのか?SHDOCVW.DLLのバージョン(6.00.2800.1400)による違いなのか?それとも、まったく別の問題なのか?困っております。

よろしく、お願いします。

編集 削除
魔界の仮面弁士  2004-03-08 14:12:52  No: 112224  IP: [192.*.*.*]

とりあえず…参照設定は外して、レイトバインドで生成してみてください。

Dim objShellWindows As Object
Set objShellWindows = CreateObject("Shell.Application").Windows()

編集 削除
あげ  2004-03-08 19:56:58  No: 112225  IP: [192.*.*.*]

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

レイトバインド?また、初めて耳にする言葉を聞いてしまいました。
調べてみたら、参照設定するものをアーリーバインド、Object型で宣言したオブジェクトを、CreateObject()関数を利用して生成するのがレイトバインドですよね。

アーリーバインドで作成する方法で、友人のマシンで試したところ、エラーが発生しないことから、恐らく私のマシン環境で設定が悪いのか、不具合があるのだろうと思います。そのまま、友人のマシンをお借りして、IEのアドレスを取得するところまで、完成することができました。
つぎに、レイトバインドで作成する方法ですが、こちらはまだ、勉強不足のため、その後の処理がうまくできませんが、いろいろのことができる可能性が見えてきました。

基は、単純な?質問だったのですのが、今回のことでVBのいろいろなことが理解することができました。

魔界の仮面弁士さま、本当にありがとうございました。

編集 削除
あげ  2004-03-08 19:58:40  No: 112226  IP: [192.*.*.*]

すみません。解決のチェックを入れ忘れましたので・・・

編集 削除
魔界の仮面弁士  2004-03-08 20:26:55  No: 112227  IP: [192.*.*.*]

> 参照設定するものをアーリーバインド、Object型で宣言したオブジェクトを、CreateObject()関数を利用して生成するのがレイトバインドですよね。

とりあえずは、そういう形で覚えてもらっても良いかと思いますが、
厳密には、参照設定やCreateObject関数とは、直接は関係ありません。

まぁ、まるっきり無関係というわけでも無いのですが、
---
Dim A As Object
Dim B As Variant
Dim C As Form
Dim D As Form1

Set A = Form1    'レイトバインド(実行時バインディング)
Set B = Form1    'レイトバインド(実行時バインディング)
Set C = Form1    'レイトバインド(実行時バインディング)
Set D = Form1    'アーリーバインド(事前バインディング)
---
のように、CreateObjectとは関係なく利用される事もありますので、ご注意を。


なお、オブジェクトによっては、「アーリーバインディング専用」
「レイトバインディング専用」「アーリー/レイト両用」の物があります。
(VB用コンポーネントのほとんどは、両対応のオブジェクトです)


MSDNライブラリの、以下の項も参照してみてください。

【1】の項では、VBで使われる 3種類のバインディングについて記載されています。
【2】の項では、『固有オブジェクト型と総称オブジェクト型』あたりが重要かと。

[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
  └[Visual Basic の使用方法]
    ├[コンポーネント ツール ガイド]
    │└[ActiveX コンポーネントの作成方法]
    │  └[コード コンポーネントの作成技術]
    │    └[バインディングが ActiveX コンポーネントのパフォーマンスに与える影響]【1】
    └[プログラミング ガイド]
      └[Visual Basic の基本]
        └[プログラミングの基礎]
          └[オブジェクトの使用方法]
            └[オブジェクトの作成]【2】

編集 削除
魔界の仮面弁士  2004-03-08 20:46:56  No: 112228  IP: [192.*.*.*]

上記に、2点ほど補足しておきます。

{その1}

> 厳密には、参照設定やCreateObject関数とは、直接は関係ありません。

まれに、「CreateObjectを使うのがレイト、Newがアーリー」と
解説されているサイトや参考書もあるようですが、MSDNライブラリの
先述の【1】の項では、作成方法とは無関係とされています。

上記【1】の項より引用:
》 <重要>
》   事前バインディングを使うか実行時バインディングを使うかは、
》 変数の宣言方法によって決まります。オブジェクトの作成方法とは
》 関係ありません。


---------
{その2}

> Set A = Form1    'レイトバインド(実行時バインディング)
> Set B = Form1    'レイトバインド(実行時バインディング)
> Set C = Form1    'レイトバインド(実行時バインディング)
> Set D = Form1    'アーリーバインド(事前バインディング)

これに付いても、MSDNライブラリに若干の解説があります。
(先述の【2】の項や、「総称オブジェクト型変数」という項など)

例えば、Form1上にテキストボックス Text1 があった場合、上記の後で、
  C.Text1.Text = "あいうえお"
  D.Text1.Text = "かきくえこ"
などと書く場合に、違いがわかるかと思います。

固有オブジェクト型である Form1 の時は、Dの後に . を入力した時に、
VB6のIntelliSense(「自動メンバ表示」機能)によって、[Text1]が
一覧に表示されますが、A〜Cに関しては[Text1]が表示されません。

実行時まで、Text1というメンバがあるかどうかが判定できないため、
この場合、A〜Cは実行時結合、Dは事前結合という事になります。

編集 削除
あげ  2004-03-08 22:23:41  No: 112229  IP: [192.*.*.*]

魔界の仮面弁士さま、さらなる詳しい説明ありがとうございます。

msdnライブラリは、VBを使い始めた頃に見ましたが、初心者には専門用語が多く、正直わかりづらいものでした。
そこで私は、市販の参考書やネットで調べることが多くなり、msdnライブラリを避けていました。

しかし、今あらためてmsdnライブラリを見たら、なんとなく理解できてるような気がします。msdnライブラリも結構いいこと書いてるなって思いました。(当たり前でしょうけど・・・)

編集 削除