tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: IE11を新規セッションで2つ起動したい
投稿日: 2015/09/24(Thu) 14:18
投稿者魔界の仮面弁士
>>> COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。
>> ソリューションエクスプローラーにて、[相互運用型の埋め込み]を True から False に変更しておいてください。

VB2010 以降のバージョンを使っている場合、COM オブジェクトをキャストする際に
 『COM コンポーネントを表す型のインターフェイスを
   COM コンポーネントを表さない型にキャストすることはできません』
というエラーが出る場合があります。この場合は、
 (1) ソリューション エクスプローラーで、[全てのファイルを表示]アイコンをクリック
 (2) ソリューション エクスプローラーの[参照設定]の下から、該当アセンブリを選択し、
  プロパティの「相互運用型の埋め込み」を True から False にする。
を試してみてください。


>>> Dim objIE As New SHDocVw.InternetExplorer
>> 元ネタはこれですかね?
>> http://log.windows78.net/2015/05/1350/
> 参考にした元ネタはそこです。

すぐ下で、objIE = CType(obj…) として代入していますので、
事前に New しておく意味はありません。

Dim objIE As New SHDocVw.InternetExplorer
ではなく、
Dim objIE As SHDocVw.InternetExplorer
で十分でしょう。


>>> obj = CreateObject("Shell.Application")
>> 使いたいのが ShellWindows コレクションなら、最初から {9BA05972-F6A8-11CF-A442-00A0C90A8F39} を
>> Activator.CreateInstance するのも手です。

無理に書き換える必要の無い箇所ですが、一応補足しておくと:

今回使用しているのは、obj.Windows なプロパティですが、
これが返すデータ型は SHDocVw.ShellWindows という型です。

ちなみに、obj の本来のデータ型は、Shell32.Shell 型です。


すなわち今回は、「Shell オブジェクトの Windows プロパティから ShellWindows オブジェクトを取得」
していることになるわけですが、「Shell を経由させずに、ShellWindows を直接取得」するために、
 'この変数は、元コードの obj.Windows に相当
 Dim windows As New SHDocVw.ShellWindows()
と記述したり、あるいは参照設定を省いて
 Dim windows As Object = Activator.CreateInstance( _
   Type.GetTypeFromCLSID(Guid.Parse("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")))
と書くこともできる…という程度の話です。



>> Start メソッドの戻り値に対して .MainWindowHandle プロパティで HWND を得て、
これは要するに、
 Dim p = Process.Start("C:\Program Files\Internet Explorer\iexplore.exe", "-noframemerging " & strURL)
 MsgBox("待機", MsgBoxStyle.SystemModal)
 MsgBox(p.MainWindowHandle, MsgBoxStyle.SystemModal)
ということです。


>> そこから子ウィンドウを辿って "Internet Explore_Server" ウィンドウを探していき、
>> そこに WM_HTML_GETOBJECT を投げることで IHTMLDocument2 を得られるのでは
手順的には、下記の Functoin GetIEDocument() に相当します。
 http://log.windows78.net/2015/06/1404/

上記のままだと、「As EnumChildProc」がエラーになるので、
『Delegate Function EnumChildProc(ByVal hWnd As IntPtr, ByRef lParam As IntPtr) As Boolean』
を追加しておきましょう。

そうすれば、
 Dim doc As Object = GetIEDocument(p.MainWindowHandle)
あるいは
 Dim doc As mshtml.IHTMLDocument2 = GetIEDocument(p.MainWindowHandle)
のようにして、"みえますねっとPRO" のログインページの HTML オブジェクトに
アクセスでき(ると思い)ます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。