tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSHDocVw.InternetExplorer の Visible で エラー
記事No11869
投稿日: 2017/08/06(Sun) 15:23
投稿者エジエジ
Windows 10
IE 11
Visual Studio 2015 vb
参照
 COM
  Microsoft HTML Object Library 4.0
  Microsoft Internet Controls 1.1
 アセンブリ
  Microsoft.mshtml

テストコード
Public Class Form1
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  ' エラー
  Dim objIE As SHDocVw.InternetExplorer = CType(CreateObject("InternetExplorer.Application"), SHDocVw.InternetExplorer)
  objIE.Navigate("hhttps://www.yahoo.co.jp/")
  objIE.Visible = True    ' ----- ※1

  ' 問題なく表示される
  Dim objIE As Object
  objIE = CType(CreateObject("InternetExplorer.Application"), SHDocVw.InternetExplorer)
  objIE.Navigate("hhttps://www.yahoo.co.jp/")
  objIE.Visible = True

 End Sub
End Class

※1 エラー
型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました
追加情報:メンバーが見つかりません。 (HRESULT からの例外:0x80020003 (DISP_E_MEMBERNOTFOUND))


数ある説明サイトのサンプルをそのまま利用してもエラーが出てしまいます。
IE側の設定かとも思い色々調べてみたのですが、解決には至りませんでした。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: SHDocVw.InternetExplorer の Visible で エラー
記事No11871
投稿日: 2017/08/07(Mon) 07:41
投稿者shu
ブラウザを立ち上げてページを表示するだけなら
Process.Start("hhttps://www.yahoo.co.jp")

だけでよいですが、目的はなんでしょう?

[ツリー表示へ]
タイトルRe^2: SHDocVw.InternetExplorer の Visible で エラー
記事No11872
投稿日: 2017/08/07(Mon) 09:24
投稿者エジエジ
回答ありがとうございます。
目的自体は他の方法(WebBrowser)で解決出来たのですが、わからないものをわからないまま放置したくなく質問させていただきました。
今回のようにサイトに載っているサンプルが動かないとなると、今後わからない部分を調べ、サンプルを実行しても同じことが起こってしまいそうなので、出来たら解決しておきたいと思っております。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: SHDocVw.InternetExplorer の Visible で エラー
記事No11873
投稿日: 2017/08/07(Mon) 14:11
投稿者花ちゃん
>   ' エラー
>   Dim objIE As SHDocVw.InternetExplorer = CType(CreateObject("InternetExplorer.Application"), SHDocVw.InternetExplorer)

そもそも変数の宣言の仕方が間違っているのでエラーが発生しているのです。

> 数ある説明サイトのサンプルをそのまま利用してもエラーが出てしまいます。

そのようなサンプルを掲載しているサイトがあるのなら URL を貼って教えてください。
ここのサンプルではそのような使い方をしておりませんが。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=192
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=301&no=0

[ツリー表示へ]
タイトルRe^2: SHDocVw.InternetExplorer の Visible で エラー
記事No11875
投稿日: 2017/08/08(Tue) 02:11
投稿者エジエジ
回答ありがとうございます。

テストコードとして提示したプログラムしか試していないような誤解を招く表現をしてしまい、申し訳ありませんでした。
検索にて、自分の知識の及ぶ範囲で関連となりそうな単語を並べ、出てきたものを試し続け、行き着いたところで最終的に動くコードを載せて投稿してしまいました。
下記、確認したURLの一部となります。(アダルトサイトと警告が出て投稿できかったものがあります。)

hhttps://www.pcreview.co.uk/threads/getobject-internetexplorer-application-unhandled-exception.1891345/
hhttps://stackoverflow.com/questions/32272818/ie-visible-false-but-it-actually-shows-c-sharp
hhttps://stackoverflow.com/questions/26543893/vba-on-webpage-throws-automation-unspecified-error-at-html-document
hhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14127208474
hhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14121557939

テストコードはこちらの回答欄となります。
hhttps://teratail.com/questions/39613

回答にて提示いただけたプログラムも、もちろん試した結果の質問となります。
結果は同様のエラーが検出されました。

vb .net ie os どのようなものでも可能性を示唆していただけましたら、試していきたいと思っております。
何か思い当たるものが御座いましたら、御教授ください。

宜しくお願いいたします。

[ツリー表示へ]
タイトルRe: SHDocVw.InternetExplorer の Visible で エラー
記事No11876
投稿日: 2017/08/08(Tue) 11:05
投稿者魔界の仮面弁士
> 型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました
> 追加情報:メンバーが見つかりません。 (HRESULT からの例外:0x80020003 (DISP_E_MEMBERNOTFOUND))

当方では再現しなかったので、なんらかの環境依存の問題があるのかもしれませんが
具体的な情報は持ち合わせていません。
Windows Update を行ってみても同じでしょうか?

[Internet Explorer 11 の "DISP_E_MEMBERNOTFOUND" エラーとプロキシ認証の問題]
https://support.microsoft.com/ja-jp/help/3119137/



ただ、一般的には
 Dim objIE As New SHDocVw.InternetExplorer()
 objIE.Visible = True
もしくは
 Dim objIE As Object = CreateObject("InternetExplorer.Application")
 objIE.Visible = True
あるいは
 Private WithEvents objIE As SHDocVw.InternetExplorer
 objIE = New SHDocVw.InternetExplorer()
と書くべきかと思います。


アーリーバインドとレイトバインドの両方を使うケースでも、
 Dim objIE1 = CreateObject("InternetExplorer.Application")
 Dim objIE2 = DirectCast(objIE1, SHDocVw.InternetExplorer)
もしくは、
 Dim objIE3 As New SHDocVw.InternetExplorer()
 Dim objIE4 As Object = CObj(objIE3)
でしょう。



> Dim objIE As SHDocVw.InternetExplorer = CType(CreateObject("InternetExplorer.Application"), SHDocVw.InternetExplorer)
> objIE.Visible = True    ' ----- ※1
このケースでは、InternetExplorer インターフェイス のコクラスである
InternetExplorerClass クラスの Visible プロパティへのアーリーバインドでの書き込みとなります。

> Dim objIE As Object = CType(CreateObject("InternetExplorer.Application"), SHDocVw.InternetExplorer)
> objIE.Visible = True
上記の CType に意味があるのかは疑問ですが、この場合はレイトバインドになりますので、
先のケースとは手続きとしては別ですね。
とはいえデュアルインターフェイスの場合、本来は同じ結果になることが期待されるのですが…。

[ツリー表示へ]
タイトルRe^2: SHDocVw.InternetExplorer の Visible で エラー
記事No11877
投稿日: 2017/08/08(Tue) 15:03
投稿者魔界の仮面弁士
下記の oIE1〜oIE8 は、当方環境ではいずれのパターンも動作しました。
そちらの環境だと
    oIE3.Visible = True
    oIE4.Visible = True
    oIE5.Visible = True
が DISP_E_MEMBERNOTFOUND になるのでしょうか?



Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    '[InvalidCastException]
    '  IProvideClassInfo をサポートしていない COM コンポーネント、または
    '  登録された相互運用機能アセンブリを含まない COM コンポーネントは、
    '  __ComObject 型にラップされます。この型のインスタンスを他のクラスに
    '  キャストすることはできませんが、基になる COM コンポーネントが
    '  インターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、
    '  インターフェイスにキャストすることができます。
    'Dim oIE0 As SHDocVw.InternetExplorerClass = CreateObject("InternetExplorer.Application")

    '以下は実行できた
    Dim oIE1 As SHDocVw.InternetExplorerClass = New SHDocVw.InternetExplorerClass()
    oIE1.Navigate("http://www.fileformat.info/info/unicode/char/FF8D/")
    Dim oIE2 As SHDocVw.InternetExplorerClass = New SHDocVw.InternetExplorer()
    oIE2.Navigate("http://www.fileformat.info/info/unicode/char/3079/")
    Dim oIE3 As SHDocVw.InternetExplorer = CreateObject("InternetExplorer.Application")
    oIE3.Navigate("http://www.fileformat.info/info/unicode/char/307A/")
    Dim oIE4 As SHDocVw.InternetExplorer = New SHDocVw.InternetExplorerClass()
    oIE4.Navigate("http://www.fileformat.info/info/unicode/char/30D9/")
    Dim oIE5 As SHDocVw.InternetExplorer = New SHDocVw.InternetExplorer()
    oIE5.Navigate("http://www.fileformat.info/info/unicode/char/30DA/")
    Dim oIE6 As Object = CreateObject("InternetExplorer.Application")
    oIE6.Navigate("http://www.fileformat.info/info/unicode/char/30D8/")
    Dim oIE7 As Object = New SHDocVw.InternetExplorerClass()
    oIE7.Navigate("http://www.fileformat.info/info/unicode/char/3078/")
    Dim oIE8 As Object = New SHDocVw.InternetExplorer()
    oIE8.Navigate("http://www.fileformat.info/info/unicode/char/31F8/")


    oIE1.Visible = True     '成功
    oIE2.Visible = True     '成功
    oIE3.Visible = True     '成功
    oIE4.Visible = True     '成功
    oIE5.Visible = True     '成功
    oIE6.Visible = True     '成功
    oIE7.Visible = True     '成功
    oIE8.Visible = True     '成功

    SetVisible1(oIE1, True) '成功
    SetVisible1(oIE2, True) '成功
    SetVisible1(oIE3, True) '成功
    SetVisible1(oIE4, True) '成功
    SetVisible1(oIE5, True) '成功
    SetVisible1(oIE6, True) '成功
    SetVisible1(oIE7, True) '成功
    SetVisible1(oIE8, True) '成功

    SetVisible2(oIE1, True) '成功
    SetVisible2(oIE2, True) '成功
    SetVisible2(oIE3, True) '成功
    SetVisible2(oIE4, True) '成功
    SetVisible2(oIE5, True) '成功
    SetVisible2(oIE6, True) '成功
    SetVisible2(oIE7, True) '成功
    SetVisible2(oIE8, True) '成功

    SetVisible3(oIE1, True) '成功
    SetVisible3(oIE2, True) '成功
    SetVisible3(oIE3, True) 'プロパティ取得できず
    SetVisible3(oIE4, True) 'プロパティ取得できず
    SetVisible3(oIE5, True) 'プロパティ取得できず
    SetVisible3(oIE6, True) 'プロパティ取得できず
    SetVisible3(oIE7, True) 'プロパティ取得できず
    SetVisible3(oIE8, True) 'プロパティ取得できず

    SetVisible4(oIE1, True) '成功
    SetVisible4(oIE2, True) '成功
    SetVisible4(oIE3, True) 'プロパティ取得できず
    SetVisible4(oIE4, True) 'プロパティ取得できず
    SetVisible4(oIE5, True) 'プロパティ取得できず
    SetVisible4(oIE6, True) 'プロパティ取得できず
    SetVisible4(oIE7, True) 'プロパティ取得できず
    SetVisible4(oIE8, True) 'プロパティ取得できず

    SetVisible5(oIE1, True) '成功
    SetVisible5(oIE2, True) '成功
    SetVisible5(oIE3, True) '成功
    SetVisible5(oIE4, True) '成功
    SetVisible5(oIE5, True) '成功
    SetVisible5(oIE6, True) '成功
    SetVisible5(oIE7, True) '成功
    SetVisible5(oIE8, True) '成功
End Sub

Private Sub SetVisible1(Of T)(target As T, NewValue As Boolean)
    CallByName(target, "Visible", CallType.Let, NewValue)
End Sub

Private Sub SetVisible2(Of T)(target As T, NewValue As Boolean)
    CallByName(target, "[DispId=402]", CallType.Let, NewValue)
End Sub

Private Sub SetVisible3(Of T)(target As T, NewValue As Boolean)
    GetType(T).GetRuntimeProperty("Visible").SetValue(target, NewValue)
End Sub

Private Sub SetVisible4(Of T)(target As T, NewValue As Boolean)
    GetType(T).GetProperty("Visible").SetValue(target, NewValue)
End Sub

Private Sub SetVisible5(Of T)(target As T, NewValue As Boolean)
    GetType(T).InvokeMember("Visible", BindingFlags.SetProperty, Nothing, target, New Object() {NewValue})
End Sub

[ツリー表示へ]
タイトルRe^3: SHDocVw.InternetExplorer の Visible で エラー
記事No11879
投稿日: 2017/08/09(Wed) 03:24
投稿者エジエジ
回答ありがとうございます。

結果から申し上げますと、エラーを吐かなくなりました。ありがとうございます。

Windows Updateの確認、VSの更新の確認、IEの設定の初期化、プロジェクトの新規作成、その際にNew SHDocVw.InternetExplorerClass()でエラーとなったので、参考サイトを参考に対処、System.ReflectionのImports

こちらの都合で申し訳ないのですが、あまり時間もなく工程ごとの確認を怠ってしまったため、どの段階で出来るようになったのか判断できませんでした。申し訳ありません。
また、まとまった時間のとれた際、魔界の仮面弁士様からいただいた返答を元に検証していきたいと思います。

この度は検証用のプログラムまで作成していただき、ありがとうございました。
まだまだわからないことだらけで、説明いただけた内容の半分も理解出来ていない現状ではありますが、暇を見つけ精進していきたいと思います。
ありがとうございました。

[ツリー表示へ]