複数開いているIEのアドレスをListboxに登録するには、どうしたらよいでしょうか?
使用環境はWinXP、VB6(SP6)、IE6です。
よろしく、お願いします。
ShellWindowsコレクションを使えば、起動されている
InternetExplorerオブジェクトを列挙することができます。
あとは、InternetExplorerオブジェクトのLocationURLプロパティで、
アドレスを取得することができるかと。
魔界の仮面弁士さま、ご返答ありがとうございます。
ShellWindowsコレクションについてですが、使用方法がわからず困っております。
ネットで調べても、いまひとつ理解できません。
よろしく、お願いします。
ShellWindowsについてですが、
Dim objShellWindows As ShellWindows
Set objShellWindows = New ShellWindows
として、ShellWindowsオブジェクトを生成しようとしましたが、
”クラスはオートメーションをサポートしていません。(Error 430)”
という、エラーが発生しました。
文法が悪いのか?SHDOCVW.DLLのバージョン(6.00.2800.1400)による違いなのか?それとも、まったく別の問題なのか?困っております。
よろしく、お願いします。
とりあえず…参照設定は外して、レイトバインドで生成してみてください。
Dim objShellWindows As Object
Set objShellWindows = CreateObject("Shell.Application").Windows()
魔界の仮面弁士さま、度々ありがとうございます。
レイトバインド?また、初めて耳にする言葉を聞いてしまいました。
調べてみたら、参照設定するものをアーリーバインド、Object型で宣言したオブジェクトを、CreateObject()関数を利用して生成するのがレイトバインドですよね。
アーリーバインドで作成する方法で、友人のマシンで試したところ、エラーが発生しないことから、恐らく私のマシン環境で設定が悪いのか、不具合があるのだろうと思います。そのまま、友人のマシンをお借りして、IEのアドレスを取得するところまで、完成することができました。
つぎに、レイトバインドで作成する方法ですが、こちらはまだ、勉強不足のため、その後の処理がうまくできませんが、いろいろのことができる可能性が見えてきました。
基は、単純な?質問だったのですのが、今回のことでVBのいろいろなことが理解することができました。
魔界の仮面弁士さま、本当にありがとうございました。
すみません。解決のチェックを入れ忘れましたので・・・
編集 削除> 参照設定するものをアーリーバインド、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】
上記に、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は事前結合という事になります。
魔界の仮面弁士さま、さらなる詳しい説明ありがとうございます。
msdnライブラリは、VBを使い始めた頃に見ましたが、初心者には専門用語が多く、正直わかりづらいものでした。
そこで私は、市販の参考書やネットで調べることが多くなり、msdnライブラリを避けていました。
しかし、今あらためてmsdnライブラリを見たら、なんとなく理解できてるような気がします。msdnライブラリも結構いいこと書いてるなって思いました。(当たり前でしょうけど・・・)