どなたかご教授ください。どのクラスを使用したらよいか全くわかりません。
CHtmlViewクラスを使用して可能でしょうか?
CHtmlView はちょっと無理だと思いますが
http://support.microsoft.com/kb/q249232/
http://support.microsoft.com/kb/q176792/
この辺を参考にして IE の COM インターフェイスを
取得すれば, 大抵のことは出来ると思います。
ちなみに, HWND から IHTMLDocument が取れない場合は
WM_GETISHELLBROWSER 経由で IWebBrowser 取るといいです。
forty-five様、ご回答ありがとうございます。
ちょっと話はずれてしましますが、IEを含むすべての
ブラウザーの接続URL情報を得たい場合はCOM インターフェイス
で対処することは可能でしょうか?
ただ今、このソフトに相当するものを製作しようと思っています。
http://www.vector.co.jp/soft/winnt/net/se333195.html
また、このソフトはどのような方法で諸情報を得てると推測できますか?
改めてご教授願います。
言われているソフトは多分、IEがどうのこうのではなくて
Httpプロトコルでやり取りされるパケットを監視して
その内容をログに書き出しているのではないかと思います。
IEだけを監視した所でFireFox等を使われたらおしまいですから。
PATIO様、ご返答ありがとうございます
Httpプロトコルを監視するにはどの方法がベストでしょうか?
COMインターフェイスを使用することにより可能でしょうか?
> Httpプロトコルを監視するにはどの方法がベストでしょうか?
> COMインターフェイスを使用することにより可能でしょうか?
PATIOさんが言われているのは、COMインターフェイスなどではなく、
もっと低レベルな部分での監視ということだと思います。
socket関係のAPIを利用して、自力でHttpプロトコルの通信を実装してしまえば、
COMなど全く関係なくなってしまいますので。
Winsockを使い、80ポートのパケット情報を取得する、プルグラムを
作成しましたが、html以外のかなり余計なデータを拾ってしまいます。
htmlデータだけ拾う関数はないでしょうか?
パケットレベルで見る場合、純粋にHTMLの部分だけでなくて
制御用のデータとか諸々のデータがくっついているのはソケットレベルのインターフェイスではごく当たり前の話です。
ブラウザはこういった制御用の部分を外して純粋にHTMLの部分だけを取り出して表示に使っているわけです。
ですから、HTMLだけの知識でパケットを見ても駄目です。
HTTPプロトコルの知識も必要です。
私が知る範囲ではパケットからHTMLの部分だけを取り出すような便利な関数と言うのは知りません。
通常、ソケットレベルの関数と言うのは低レベルな機能しか提供しないと思いますので、
多分、自分でHTTPプロトコルを解析する必要があるでしょう。
ちなみにこういったハードウエアよりのソフトというのは、
基本的に泥臭いコードを書かざる得ないのが普通です。
ハードウエアよりの関数は基本的に汎用性を主軸にすえて作成されているので
自分が必要な部分だけを取り出してくれるような便利関数はまずないと考えた方がいいです。
HTTPプロトコルを自分で勉強してでもやってやるってくらいの意気込みが無いと難しいと思いますよ。
アプリケーションレベルよりもはるかにめんどくさい物だと考えた方がいいです。
PATIO様ご丁寧にご返答いただきありがとうございます。
私にはWinsockを使いこなすのはまだ、早いようなので、まずは
ブラウザーをIEに絞り、COMインターフェイスを使用して今度は
挑戦しようと思います。
接続中のURLを取得しましたが、今度はHTMLドキュメントを取得したいのですが、以下のソースに具体的にどの関数、インターフェイスを追加すればよろしいですか、どのたかご教授ください。
#include "stdafx.h"
#include <iostream>
using namespace std;
#import "C:\WINDOWS\system32\mshtml.dll"
#import "C:\WINDOWS\system32\shdocvw.dll"
int _tmain(int argc, _TCHAR* argv[])
{
long nIndex;
long nMax;
HRESULT sc;
sc = ::CoInitialize(NULL);
SHDocVw::IShellWindowsPtr pShellWindows;
pShellWindows.CreateInstance(__uuidof(SHDocVw::ShellWindows));
IDispatchPtr spDisp;
nMax = pShellWindows->GetCount();
for (nIndex = 0; nIndex < nMax; nIndex++) {
_variant_t va(nIndex, VT_I4);
spDisp = pShellWindows->Item(va);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
//IHTMLDocument2Ptr HTMLDocument = spBrowser->get_Document(&spDisp);
if (spBrowser != NULL)
{
cout << (LPCTSTR)spBrowser->GetLocationURL()<<"\n\n";
}
}
return 0;
}
取得するとができました。アドバイスいただけた方に感謝いたします。
ツイート | ![]() |