- - PR -
InternetExplorerとHTMLDocumentについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-03-28 00:39
VB.netよりShell.Applicationを用いて、その時点開いているウインドウの数分ループさせてWindowオブジェクトごとのDocumentを見比べてInternetExplorerを発見しようとしているのですが、なぜかIEのDocumentがHTMLDocumentを返さず、Explorerと同じComObjectとなります。
何かご存知の方いらっしゃいましたら、ご教授お願い致します。 loshell = CreateObject("Shell.Application") lowindows = CallByName(loshell, "Windows", CallType.Method) For liCnt = 0 To CInt(CallByName(lowindows, "Count", CallType.Get)) - 1 loexp = CallByName(lowindows, "Item", CallType.Get, liCnt) lodocument = CallByName(loexp, "Document", CallType.Get) If lodocument.GetType().Name Like "HTMLDocument*" Then End IF NEXT | ||||
|
投稿日時: 2006-03-28 01:02
.NET から見たレイトバインディングの COM オブジェクトってのはそんなもんです。
判断は Document じゃなくて FullName プロパティあたりで行うべきでしょう。 あと、COM オブジェクトの参照がだだ漏れですが、 Marshal.ReleaseComObject は大丈夫ですか? [ メッセージ編集済み 編集者: Hongliang 編集日時 2006-03-28 01:02 ] | ||||
|
投稿日時: 2006-03-28 03:12
Collonさん,こんばんは。
私は遅延バインディングはOption Strict Off派です。 Collonさんのとほとんど同じ処理ですが,以下のコードでうまくいきました。 (ListBoxにリストアップするコードです)
[ メッセージ編集済み 編集者: YAS 編集日時 2006-03-28 03:16 ] [ メッセージ編集済み 編集者: YAS 編集日時 2006-03-28 03:16 ] | ||||
|
投稿日時: 2006-03-28 07:22
ReleaseComObject パターンは、コードを書くのも面倒でしょうから、
こちらでもリンクしておいてください。(;^-^) COM オブジェクトを解放する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-03-29 00:23
Hongliangさん、YASさん、じゃんぬねっとさんご回答ありがとうございます。
参考にコードの記述させて頂きます。 >COM オブジェクトの参照がだだ漏れですが、 Marshal.ReleaseComObject は大丈夫で すか? すみません、Comオブジェクトの開放の記述の方は、ここへの記載は省かせていただきました。実際の機能には記述しております。(載せて頂いたサイトは、機能作成の際、私も参考にさせて頂きました) 話は変わるのですが、私の方で、いろいろと動作検証を行なっていたところ、 .NETをインストールしている環境において、私の記述で作成したものを実行すると lodocument.GetType().Nameが「HTMLDocument」を取得しているのですが、 その環境から、.NETをアンインストールして同じものを再度実行すると 「_ComObject」となります。 この動きについて何かご存知ありませんでしょうか。 .NETが入っていない環境でも、「HTMLDocument」とするための なにかを設定・インストールしなければならないのでしょうか。 ご意見宜しくお願い致します。 | ||||
|
投稿日時: 2006-03-29 07:18
TypeOf 〜 Is でもダメでしょうか? というより、とりあえず System.Type.Name を使うのはやめましょう。 コンパイル解決できる TypeOf 〜 Is を使うべきです。 TypeName についても同様のことが言えます。 型の検証であって、文字列の検証ではないはず... CallByName もコンパイル解決できていないので、おすすめしません。 遅延バインディングに関しても同様です。 変数の型が明記されている場所がないですが、型は明示化されていますか? このプログラムは、その型のインスタンスが生成される保証がありません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-03-29 10:20
mshtml 用の PIA が外れちゃったのかな? .NET Framework SDK を上書きインストールすると回復したりはしないですかね? | ||||
|
投稿日時: 2006-03-30 13:15
レス遅くなりまして、すみません。
じゃんぬねっとさん、渋木宏明(ひどり)さん新たにご意見ありがとうございます。 >.NET Framework SDK を上書きインストールすると回復したりはしないですかね? インストールして動作検証してみましたが、変化はありませんでした。 >コンパイル解決できる TypeOf 〜 Is を使うべきです。 TypeOf 〜 Is で記述してみます。 >変数の型が明記されている場所がないですが、型は明示化されていますか? 変数は、 Dim loshell As Object Dim lowindows As Object Dim loexp As Object Dim loexecution As Object Dim lodocument As Object Dim lolocationName As Object と一応定義はしています。(記載もれしてました。すみません。) |
1