IE'enの主な機能IE'enのプログラム・コードIE'enはリモートPC上のIEと接続し,IEが現在アクセスしているURLリストを表示したり,Webサイトに送信したデータを取得する機能を提供する。ここではIE'enが提供する主な機能について,実現するためのソースコードを紹介する。IE'enが提供する主な機能は,表1[拡大表示]の通りである。以下では,表1の機能を実現する方法を,サンプル・プログラムを示しながら説明していこう。リモートPC上でShellWindowsコンポーネントを起動し,IShellWindowsインタフェースへの参照を取得するコードIEはIWebBrowser2という名前のCOMインタフェースを実装している。IE'enは,リモートPC上のIE(遠隔操作するIE)からこのインタフェースへの参照を取得してデータを得る。IWebBrowser2インタフェースを取得するには,ShellWindowsという名前のCOMコンポーネントを,遠隔操作するリモートPC上で起動する必要がある。ShellWindowsもまたCOMコンポーネントで,IShellWindowsインタフェースを提供する。IShellWindowsインタフェースは,PC上で現在開かれているIEウインドウのリストを提供する機能を提供する。リスト2[拡大表示]は,リモートPC上でShellWindowsコンポーネントを起動し,IShellWindowsインタフェースへの参照を取得するためのコードである。最初にCOSERVERINFO構造体を作成する。これはあとに続くCoCreateInstanceExの引数としてリモートPCのIPアドレスをセットするための構造体である。CoCreateInstanceExは,COMコンポーネントを起動するためのAPIである。最初の引数には,起動したいCOMコンポーネントを特定するクラスIDを設定する。MULTI_QIは,インタフェースへの参照を受け取るための構造体である。次に,起動したIShellWindowsインタフェースを使用して,IWebBrowser2インタフェースを取得する。リスト3[拡大表示]に示すコードでは,最初にget_Countメソッドを使ってリモートPC上に存在するIEウインドウの数を取得し,次にItemメソッドによりIEのIWebBrowser2インタフェースを取得している。Itemメソッドの引数として渡すIDispachインタフェースは,IWebBrowser2インタフェースの上位インタフェースであり,以下に続くQueryInterfaceメソッドによりIWebBrowser2インタフェースへの変換を行っている。IWebBrowser2インタフェースには,IEを制御するためのさまざまなメソッドがメンバーとして存在する。IEのウインドウが現在表示しているWebページのURLを取得するには,get_LocationNameメソッドを使用する(リスト4[拡大表示])。IEのウインドウが現在表示しているWebページのURLを取得するコードCookie情報およびHTML文書の内容の取得IEがWebサイトから受信したCookie情報やHTML文書そのものにアクセスする方法を紹介する。IEがWebサイトから受信した情報は,IEによってIHTMLDocument2インタフェースを実装するCOMコンポーネントのインスタンスとして保持されている。IEからIHTMLDocument2インタフェースを取得するには,IWebBrowser2インタフェースのメンバー・メソッドの一つである,get_Documentメソッドを使用する(リスト5[拡大表示])。IHTMLDocument2インタフェースは,get_Cookieという名前のメンバー・メソッドを持つ。Cookie情報を取得するには,単純にこのget_Cookieメソッドを呼び出せばよい(リスト6[拡大表示])。HTML文書の内容にアクセスするには,少し複雑な手続きが必要だ。HTML文書中の各要素は,IHTMLElementインタフェースを実装するCOMコンポーネントのインスタンスの集合として保持されている。このうち,<body>タグに囲まれた部分を取り出すには,リスト7[拡大表示]のようにIHTMLDocumentインタフェースのget_bodyメソッドを使用してIHTMLElementインタフェースへの参照を取得し,次にget_outerHTMLメソッドを使用して,この<body>タグで囲まれたHTML文書の内容を文字列化する。HTML文書の<body>タグに囲まれた部分を取り出すコードIEがWebサイトへ送信するデータの取得IEはブラウズ先のURLが変更される際に,イベントを発行する。このイベントを受信するためには,アプリケーション内でイベントを受信するためのインタフェースを実装するCOMコンポーネントをイベント・ハンドラとしてインスタンス化し,このインタフェースへの参照をリモートPC上のIEに提供する必要がある(図3[拡大表示])。Microsoftは,IEが発行するイベントを受け取るためのインタフェースとして,DWebBrowserEventsという名前のCOMインタフェースを定義している。このインタフェースは表2[拡大表示]のようなメンバー・メソッドを持つ。IEはURLが変更されたときにイベント・ハンドラのBeforeNavigateメソッドを呼び出す。メソッドの引数として新しいブラウズ先のURLとPOSTパラメータが渡される(リスト8[拡大表示])。リモートPC上のIEに対して,イベント・ハンドラのDWebBrowserEventsインタフェースを提供するためのコードをリスト9[拡大表示]に示す。最初に,先に取得したIWebBrowser2インタフェースを使用して,IConnectionPointContainerインタフェースを取得する。次にFindConnectionPointメソッドを使用して,DWebBrowserEventsインタフェースを提供するためのコネクション・ポイント(IConnectionPointインタフェースへの参照)を取得する。最後に,イベント・ハンドラのインスタンスを作成し,このイベント・ハンドラのIDispatchインタフェースへの参照を,IConnectionPointインタフェースのAdviseメソッドを使用して,IEに提供する。リモートPC上のIEに対してイベント・ハンドラのDWebBrowserEventsインタフェースを提供するコードブラウズページの変更IEがブラウズページを制御するには,単純にIWebBrowser2インタフェースのNavigateメソッドを呼び出せばよい。引数にURL文字列を渡してやると,IEはそのURLの示すWebページにジャンプする。新しいIEのウインドウを作成するコードIEウインドウの可視・不可視IWebBrowser2インタフェースのset_Visibleメソッドを,引数にfalseを与えて呼び出すと,リモートPC上のIEのウインドウを見えなくすることができる。逆に,trueを渡すと見えなくなったウインドウが再表示される。第1引数に,IEのクラスIDを与えて呼び出せばよい(リスト10[拡大表示])。現場の負担軽減を!医療界でのAWS活用法500万社が導入。き》データサイエンティスト育成で定評のある大阪ガスと、データ分析の専門家が共同で開発した特別プログラ...SEのための「システム営業力」養成講座SEとして仕事をする方が、顧客や経営層に対する提案力や会話力を身につけるための講座です。情報銀行の成り立ち、事例、現状課題やその行方を網羅。経営戦略である以上、「会計」の知識やスキルが欠かせません。