トップ回答者
Visual C++で、WebBrowserコントロール等からFlashで作られたコンポーネントのクリックを検出する方法について

質問
-
1週間前にMFCのメーリングリスト(http://ml.acty-net.ne.jp/ml/mfc/)にも投稿したので
マルチポストになってしまうのですが、解決する方法が見つからずに途方にくれている為、
投稿させていただきました。
何か情報がありましたら、あいまいな情報であってもいいので教えていただけないでしょうか。
Visual C++で、WebBrowserコントロールを使ってブラウザのようなアプリケーションを作成しています。
作成しようとしているものは、既存のクリック募金のサイトにアクセスして、クリック回数や募金の金額を管理してくれる簡単なアプリです。
対象とするサイトは以下のようなサイトです。
http://www.kirin.co.jp/active/env/mizunomegumi/click.html
http://clickbokin.ekokoro.jp/belmo.html
http://www.thehungersite.com/cgi-bin/WebObjects/CTDSites
クリック時に、WebBrowserコントロールのOnBeforeNavigate2()が呼ばれるサイト
では、OnBeforeNavigate2()でフックする方法が使えると思います。
ただ、一番上のキリンのサイトのようにFlashで書かれたサイトでは、クリック時に
OnBeforeNavigate2()が呼び出されないようで、クリックを検出する方法を
どのようにしたら良いかと悩んでします。
なんか、良いアイディアあるでしょうか?
WebBrowserも、HTMLも、Visual C++も、Flashも詳しくないのでどこからてを付けてよいか困っています。
よろしくお願いします。
回答
-
WebBrowser Controlを使用してアプリケーションを作成している場合に、
WebBrowser Controlが行っているHTTP通信の情報をアプリケーション側で
取得する方法ってあるでしょうか?
WebBrowserコントロールが行っているHTTP通信の内容を取得することは,
おそらく通常の方法では不可能と思います。(外していたら,すみません。)
(前の発言を見ていると,WebBrowserコントロールでなく,Flashの行っている
HTTP通信の内容を取得する必要があると思います。)
少し強引に行うとしたら,APIフックによりWinInetの呼び出しを横取りすれば出来るかと思います。。
APIフックについでの詳細は,以下のURLを参考にしてください。
http://www.geocities.jp/i96815/windows/win09.html
-
-
考えてみたものを列挙してみます。
ただ、通常は他のアプリ(コンポーネント)の動作内容を盗むようなマネはしない方が良いと思います。
アップデート等でうまく動かないとか、特殊なケースでは違う動きをするとか、予想できない事態も引き起こしますので。
・マウスフック
望んだものがクリックされたかどうかの判定が難しい?
・メッセージフック
マウスフックと同じ。マウスだけでよいのに、メッセージフックまでやるのは大げさな。
・Raw Socket
APIフックを使わずにパケットの盗み見ができる。
環境を選ぶし、手間があるかもしれない。
Flashの通信を特定するのは難しいかもしれない。
・APIフックでrecvあたりを引っかける
対象の通信内容が見える。
但し、その内容が期待しているものかどうか判別するのは難しいかもしれない?
単純なHTTPなら判別は簡単かもしれない。
・ローカルでプロキシを作る
ブラウザもFlashもそのプロキシを通して通信するようにする。
プロキシへのURL要求でどんなものが飛んでいるか捉える。
既成のプロキシが使えると楽。自作するのは大変。
すべての返信
-
WebBrowser Controlを使用してアプリケーションを作成している場合に、
WebBrowser Controlが行っているHTTP通信の情報をアプリケーション側で
取得する方法ってあるでしょうか?
WebBrowserコントロールが行っているHTTP通信の内容を取得することは,
おそらく通常の方法では不可能と思います。(外していたら,すみません。)
(前の発言を見ていると,WebBrowserコントロールでなく,Flashの行っている
HTTP通信の内容を取得する必要があると思います。)
少し強引に行うとしたら,APIフックによりWinInetの呼び出しを横取りすれば出来るかと思います。。
APIフックについでの詳細は,以下のURLを参考にしてください。
http://www.geocities.jp/i96815/windows/win09.html
-
少し強引に行うとしたら,APIフックによりWinInetの呼び出しを横取りすれば出来るかと思います。。
APIフックについでの詳細は,以下のURLを参考にしてください。
http://www.geocities.jp/i96815/windows/win09.html
返信おそくなってしまいすいません。
試してみます。
ありがとうございました。
-
-
考えてみたものを列挙してみます。
ただ、通常は他のアプリ(コンポーネント)の動作内容を盗むようなマネはしない方が良いと思います。
アップデート等でうまく動かないとか、特殊なケースでは違う動きをするとか、予想できない事態も引き起こしますので。
・マウスフック
望んだものがクリックされたかどうかの判定が難しい?
・メッセージフック
マウスフックと同じ。マウスだけでよいのに、メッセージフックまでやるのは大げさな。
・Raw Socket
APIフックを使わずにパケットの盗み見ができる。
環境を選ぶし、手間があるかもしれない。
Flashの通信を特定するのは難しいかもしれない。
・APIフックでrecvあたりを引っかける
対象の通信内容が見える。
但し、その内容が期待しているものかどうか判別するのは難しいかもしれない?
単純なHTTPなら判別は簡単かもしれない。
・ローカルでプロキシを作る
ブラウザもFlashもそのプロキシを通して通信するようにする。
プロキシへのURL要求でどんなものが飛んでいるか捉える。
既成のプロキシが使えると楽。自作するのは大変。