2Bを作っていてちょっと感じたことです。
その昔、Microsoft(以下 M$) がWebブラウザの独占禁止法を回避する為に 「WebブラウザをOSの一部にした」とは有名な話です。
では 「OSの一部」とは一体何なんでしょう...
おそらく「IEから C:\〜とかのフォルダパスを入力するとフォルダが開く」「エクスプローラからURLを入力するとWebサイトが見れる」 の事でしょう。
IE6以前の場合は一つにウィンドウ内で 「C:\〜 ←→ URL」 の切り替えが出来るので ListViewとIEコンポーネントを切り替えていたと考えていました。
2Bはタブブラウザ形式なので 「タブが増えたらIEコンポーネントを増やす」「タブを閉じたらIEコンポーネントを消す」という処理を実現させる為に ActiveX を動的に追加出来ないといけません。
VB6上では ウィンドウにコンポーネントを追加するのは簡単です。IEコンポーネントを追加するのも簡単なのですが 追加には ProgID を知る必要があります。
「IEコンポーネントの ProgID は何かな?」とOLE Viewer で調べてみます。
「Shell.Explorer」とあります。
Windows Shell は Shell. で始まるのですが IEコンポーネントが Windows Shell の一機能であると言う事なのでしょうか...
Shell.Explorer で動的追加出来るは分かりました。
では 少し遊んでみます。
の様にして Web と Local を表示させた時に 何か変わるのか見てみました。
まず objBrowser.Navigate "http://google.co.jp" の時
次に objBrowser.Navigate "c:\" の時
おお 全然違ってます!!
HTMLを表示させた時は HTMLDocument で フォルダを表示させた時は ShellFolderView なのですね。
HTMLDocument は JavaScript が得意な人はよく知っているのではないでしょか。
ShellFolderView とは何でしょう? 名前からして フォルダです。
調べてみた所 どうも Explorer のファイル・フォルダを表示している ListView部らしいです。
ふーん IEコンポーネント と Explorerのフォルダ部 は同じものなんですね。だから「Shell.Explorer」なんでしょう。
(Explorer でのウィンドウクラス名は SysListView32 ウィンドウテキストは FolderView。 objBrowser.Navigate "c:\" でも同じでした)
「OSの一部」は「Shellの一部」って事でいいでしょう...多分...
[edited 2008/05/24 03:08]