タイトル : 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 オブジェクトに アクセスでき(ると思い)ます。 |