MFCで別プロセスのIEの接続中のURLアドレスを取得するには

解決


Atsu  2005-04-06 11:00:36  No: 56879

どなたかご教授ください。どのクラスを使用したらよいか全くわかりません。


Atsu  2005-04-06 23:32:23  No: 56880

CHtmlViewクラスを使用して可能でしょうか?


forty-five  2005-04-07 08:30:10  No: 56881

CHtmlView はちょっと無理だと思いますが

http://support.microsoft.com/kb/q249232/
http://support.microsoft.com/kb/q176792/

この辺を参考にして IE の COM インターフェイスを
取得すれば, 大抵のことは出来ると思います。

ちなみに, HWND から IHTMLDocument が取れない場合は
WM_GETISHELLBROWSER 経由で IWebBrowser 取るといいです。


Atsu  2005-04-12 15:26:18  No: 56882

forty-five様、ご回答ありがとうございます。
ちょっと話はずれてしましますが、IEを含むすべての
ブラウザーの接続URL情報を得たい場合はCOM インターフェイス
で対処することは可能でしょうか?
ただ今、このソフトに相当するものを製作しようと思っています。
http://www.vector.co.jp/soft/winnt/net/se333195.html
また、このソフトはどのような方法で諸情報を得てると推測できますか?
改めてご教授願います。


PATIO  2005-04-12 23:41:58  No: 56883

言われているソフトは多分、IEがどうのこうのではなくて
Httpプロトコルでやり取りされるパケットを監視して
その内容をログに書き出しているのではないかと思います。
IEだけを監視した所でFireFox等を使われたらおしまいですから。


Atsu  2005-04-13 02:45:28  No: 56884

PATIO様、ご返答ありがとうございます
Httpプロトコルを監視するにはどの方法がベストでしょうか?
COMインターフェイスを使用することにより可能でしょうか?


KING・王  2005-04-13 03:02:45  No: 56885

> Httpプロトコルを監視するにはどの方法がベストでしょうか?
> COMインターフェイスを使用することにより可能でしょうか?

PATIOさんが言われているのは、COMインターフェイスなどではなく、
もっと低レベルな部分での監視ということだと思います。

socket関係のAPIを利用して、自力でHttpプロトコルの通信を実装してしまえば、
COMなど全く関係なくなってしまいますので。


Atsu  2005-04-14 12:41:59  No: 56886

Winsockを使い、80ポートのパケット情報を取得する、プルグラムを
作成しましたが、html以外のかなり余計なデータを拾ってしまいます。
htmlデータだけ拾う関数はないでしょうか?


PATIO  2005-04-15 01:22:25  No: 56887

パケットレベルで見る場合、純粋にHTMLの部分だけでなくて
制御用のデータとか諸々のデータがくっついているのはソケットレベルのインターフェイスではごく当たり前の話です。
ブラウザはこういった制御用の部分を外して純粋にHTMLの部分だけを取り出して表示に使っているわけです。
ですから、HTMLだけの知識でパケットを見ても駄目です。
HTTPプロトコルの知識も必要です。
私が知る範囲ではパケットからHTMLの部分だけを取り出すような便利な関数と言うのは知りません。
通常、ソケットレベルの関数と言うのは低レベルな機能しか提供しないと思いますので、
多分、自分でHTTPプロトコルを解析する必要があるでしょう。


PATIO  2005-04-15 01:27:31  No: 56888

ちなみにこういったハードウエアよりのソフトというのは、
基本的に泥臭いコードを書かざる得ないのが普通です。
ハードウエアよりの関数は基本的に汎用性を主軸にすえて作成されているので
自分が必要な部分だけを取り出してくれるような便利関数はまずないと考えた方がいいです。
HTTPプロトコルを自分で勉強してでもやってやるってくらいの意気込みが無いと難しいと思いますよ。
アプリケーションレベルよりもはるかにめんどくさい物だと考えた方がいいです。


Atsu  2005-04-16 02:28:23  No: 56889

PATIO様ご丁寧にご返答いただきありがとうございます。
私にはWinsockを使いこなすのはまだ、早いようなので、まずは
ブラウザーをIEに絞り、COMインターフェイスを使用して今度は
挑戦しようと思います。


Atsu  2005-04-16 04:33:59  No: 56890

接続中の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;
}


Atsu  2005-04-16 11:28:42  No: 56891

取得するとができました。アドバイスいただけた方に感謝いたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加