[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/17 11:13 / Filesize : 145 KB / Number-of Response : 555
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

IEコンポーネントを使い倒すスレ Ver.2



1 名前:デフォルトの名無しさん [2006/04/16(日) 21:08:42 ]
=====================================

IEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。

=====================================


最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。

※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。

(以上、前スレより)

IEコンポーネントを使い倒すスレ
pc5.2ch.net/test/read.cgi/tech/982930049/

かなり前のスレですが続編を立てました。

28 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 18:25:23 ]
なんかIE7βにしてからIEコンポーネント使ったソフトの挙動がヘンなんだが。

29 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 20:22:50 ]
さすがはM$

30 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 20:23:33 ]
仕様が変わってるのだから仕様が無い。

31 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 22:42:57 ]
だれが上手いこと言えとw

32 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 12:05:04 ]
>>28
IE7b2はデフォルトでローカル(メモリやファイルシステムにある)なhtmlで
アクティブスクリプトを有効にしないようになってるからじゃ○マイカ。

33 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 02:27:19 ]
>>32
そうだったノカー(AA略)
サンクスコ!

34 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 14:48:53 ]
>>32
IE6sp2からそうじゃなかった?

35 名前:デフォルトの名無しさん [2006/06/01(木) 19:54:50 ]
age

36 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 00:08:11 ]
IDispatchってなによですぱっちって。なんなのよーこれなんなのよー



37 名前:デフォルトの名無しさん [2006/06/02(金) 00:20:11 ]
>>36
同士よー!
IDispatchってなによですぱっちって。なんなのよーこれなんなのよー

なんか、クラスインスタンスをクラスで表しちゃったようなインターフェース。って感じだと思う。

っていうか、俺もIDispatchについて聞きたいんだけどここじゃスレ違い?

38 名前:デフォルトの名無しさん [2006/06/02(金) 00:27:50 ]
マルチポストになります。ごめんなさい
はじめVBで探していたのですが、もっと適切なスレがあったので
すいませんが、質問させてください。

サーバと通信するクライアントを作成するのに
WebBrowserControl(Maicrosoft Web Browser)(正しくはTridentらしい)を
利用してやり取りしようとしています。

入力したデータをdoPostで送っているだけなのですが、
サーバ側で見るとdoGetとdoPostの両方で来ています。
漏れの認識では少しのデータを送るときdoGet
大量のデータを送るときdoPostをりようしていると思っています。

なんで、doPostだけで送ってくれないのかわかりません。
WebBrowserControlのAPIとかどこかにないでしょうか教えてください。

後、HttpのdoPost、doGetの違いをわかりやすく詳しく説明しているサイト等を
教えていただけないでしょうか?

39 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 00:28:27 ]
ここに来るぐらいなら言語の1つぐらい持ってるだろ?
ヘルプみろよ。

40 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 00:33:54 ]
BHOをいじってます。ブラウザのイベントはInvokeで拾えるんですが
DISPID_AMBIENT_DLCONTROLの拾い方がわかりません。
IWebBrowser2からIOleClientSiteを得ればよいのかな?


41 名前:40 [2006/06/17(土) 01:33:43 ]
連投すまん。
IEでWordやExcelが開けるんだから、IEもIOleClientSiteを持ってるはずなんだが、
IWebBrowser2からどうやって取得したらよいのかわからない。
IWebBrowser2でQueryInterfaceかましてもNULLだった。

42 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 02:46:29 ]
VistaのIE7で仕様かわったっぽい?
Navigate2まわりでアクセス違反で落ちるようになった

43 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 10:16:37 ]
IOleClientSiteはクライアント側(Word, Excel)が持ってるものじゃないの


44 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 11:21:11 ]
IHTMLDocument2で、任意のタグを取得したい場合(例えばmetaタグとか)、
get_allでIHTMLElementCollectionを取得して、一個一個ループでまわしてタグ名を見ていくしかないのでしょうか?

IHTMLDocument3にgetElementsByTagNameというものがあったのですが、できればIHTMLDocument3は使いたくないです。

45 名前:40 mailto:sage [2006/06/17(土) 12:45:43 ]
>>43
ActiveDocumentを貼り付けられるものは
IOleClientSiteを持ってると思うんだけど。
Word、Excelも当然もってるし、IEも持ってるはず。
全部ActiveDocumentを開けるから。

46 名前:44 mailto:sage [2006/06/17(土) 23:31:17 ]
>>44です。get_allしてループでまわすのが面倒だったので質問したのですが、
IHTMLElementCollectionに、itemというメソッドがあって、
タグ名をもとにタグ情報を取得できそうなので解決しそうです。

失礼しました。



47 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 18:19:48 ]
いつの間にか復活してるじゃないかsage

48 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 18:48:01 ]
ブラウザイベントをInvokeで拾う方法を教えれ下さい。

49 名前:デフォルトの名無しさん mailto:sage [2006/06/24(土) 19:07:05 ]
window.external

50 名前:デフォルトの名無しさん [2006/06/24(土) 22:42:56 ]
>>48
DWebBrowserEvents2で色々やってみれ

51 名前:48 mailto:sage [2006/06/24(土) 22:55:43 ]
>>49-50
実はHtmlイベントの受信がしたかったわけですが、なんとか接続の確立ができ申した、言葉足らずで失礼。
一ヶ月かかったわ…

52 名前:デフォルトの名無しさん [2006/06/26(月) 13:55:19 ]
接頭語のIってなんなの?Iって。
IEとかIE_とかにしてくれよ。

53 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 14:40:42 ]
>>52
InterfaceのIだろ。
MFCなんかでクラス名がCナントカになっているのと同じ。

54 名前:デフォルトの名無しさん [2006/06/26(月) 18:23:46 ]
すみません
タブブラウザでソースコードを公開している奴って
ありますか?


55 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:18:45 ]
Donut RAPTなどなど

56 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 20:15:00 ]
Donut RAPTはHTMLが変に表示される
白抜き文字とかも真っ黒



57 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:10:54 ]
>>51
IWebBrowserNからDWebBrowserEvents2とか使わず、
IDispatch::Invokeでイベント取得できたってことですか?
おしえてホスィ。

DocumentCompleteが通知されてほしい。

58 名前:12 mailto:sage [2006/06/26(月) 23:18:21 ]
そういえば、IEコンポーネントのJavaScriptからC++の変数を参照する方法ですが、
IHTMLDocumentのget_Scriptで得たIDispatchからQueryInterfaceで、
IDispatchExを取得してInvokeEx呼び出せばいいみたいです。説明わかりにく。

IEコンポーネントからIActiveScriptを得るのはたぶん無理っぽいです。
IDispatchExからプロパティを追加する方法しかないっぽいです。
参考資料 → www.codeproject.com/com/dispexsinkconnector.asp

これ調べるの結構かかったなぁ

59 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:22:07 ]
IXxxxxx → Interface
CXxxxx → Concrete?またはClass?
DXxxxx → Dってなによ

60 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 15:42:37 ]
>>59
dispinterface

61 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 17:40:40 ]
>>59
さすがにコンクリートはないと思うが

62 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 19:56:47 ]
CreateWindowExで作ったIEコンポのウィンドウを破棄するときはDestroyWindowでOK?

63 名前:59 mailto:sage [2006/06/27(火) 22:31:58 ]
DIXxxxx → Dual Interfacesらしい
AfxXxxx → MFCのもの

CXxxxxはclassのCっぽいね。

64 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 21:55:54 ]
>>62
CreateWindowExってことはATLのIEコンポ?
よく調べてないけどDestroyWindowでおk(適当

65 名前:デフォルトの名無しさん [2006/06/29(木) 16:44:23 ]
はげ

66 名前:51 mailto:sage [2006/06/30(金) 05:45:25 ]
>>57
Htmlイベントじゃなくて、マウスイベントとかだったわ…重ね重ね失礼。



67 名前:57 mailto:sage [2006/06/30(金) 13:15:49 ]
>>66
いや、俺がよく見てなかったのが悪かったわ。
>実はHtmlイベントの受信がしたかったわけですが、
と書いてあるのを思いっきり見落としてた。

68 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 01:38:07 ]
HTAアプリケーションのselection=noみたいに、
IEコンポーネント内のテキストをマウスカーソルで
選択できなくするような方法をご存知ないでしょうか?

69 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 03:51:40 ]
そういうJavaスクリプトを読ませる。
www.iwate-np.co.jp/news/y2006/m07/d02/NippoNews_11.html

70 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 10:32:53 ]
>>69
オオオおおお。まさにやりたいことです。ありがとうございます。
document.onmousedown = new Function("return false");
↑これやったらボタンも押せなくなるのかと思ってましたけどできるんですね

71 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 14:24:56 ]
window.moveToやwindow.resizeToが呼び出されたことを知る方法ないでしょうか?
DWebBrowserEvents2とか見ましたが見当たりませんでした…。

72 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 19:08:31 ]
マウスポインタの下にリンクがあった場合、
そのリンクのIHTMLAnchorElementを取得するにはどうすればいいすか?

73 名前:デフォルトの名無しさん [2006/07/10(月) 12:06:11 ]
禿

74 名前:デフォルトの名無しさん [2006/07/14(金) 00:23:42 ]
すみません

IEコンポーネントでIHTMLDOMNodeを使おうとしたのですが
error C2065: 'IHTMLDOMNode' : undeclared identifier
と定義不明といわれて怒られます。

MSDNを見る限り、Mshtml.hをインクルードし
IE5以上なら使えると書いてあります。
なぜ私の所ではダメなのでしょうか?

Windows2000SP6+VisualStudio6.0+IE6です。
よろしくお願いいたします。


75 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:39:39 ]
VS6.0だと古くてヘッダに定義がないのかも。
実際に俺の環境ではVS.NET2003とVS6.0を入れてるけど、6.0にはIHTMLDOMNodeのクラス定義がないね。
VS6.0の最新のサービスパック入れたらなおるか、.NET買うかしないと。

76 名前:デフォルトの名無しさん [2006/07/14(金) 20:42:38 ]
すみません。妥当なスレが分らなかったのでここで質問させてください。

IE7の日本語ベータ3をインストールしたら、InternetOpenUrlにシフトJIS
のファイル名を使っているプログラムがエラーを起こすようになりました。

β版だからといえばそれまでですが、何か情報を持ちの方、または
対処方法、ご存知であればお教えください。

補足として、

・IE6以前とIE7ベータの英語版では問題なかった。
・IE7日本語β3からアドレスバーにS-JIS日本語名を含むURLを直接入れた場合は読み出せる。
・InternetOpenUrlでエラーが起きたとき、サーバーのログを見ると、日本語に該当する部分が
 著しく欠損した状態(文字化けとか言うレベルじゃなく)でアクセスされている模様…。

よろしくお願い致します。(日本語のUrlを使うなというのは横へ置いておいて…)




77 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 21:06:10 ]
正式版になってから言え

78 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 21:49:35 ]
>>76
InternetOpenUrlWだとどうなる?

79 名前:76 mailto:sage [2006/07/14(金) 22:19:03 ]
>>78
プログラムがANSIなのでW版はちょっと試していませんが、
ひとまず自分でURLの漢字部分をutf8エンコードして回避しました。

どうもありがとうございました。


80 名前:74 mailto:sage [2006/07/14(金) 22:33:46 ]
>75
.NETではIHTMLDOMNodeは使えるみたいですね。
あとVS6.0のSP6をインストールしてみましたが使えませんでした。
やはり.NETを買うしかないみたいですね。
ありがとうございました

81 名前:76 mailto:sage [2006/07/14(金) 22:33:46 ]
>>78
W版を試してみたところ、InternetOpenUrlWだと何も考えなく
てもうまく行きました。

自分で%E7……て変換しなくてもやってくれるようです。

重ねてありがとうございました。

……自分で変換したさっきの苦労はorz

82 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 22:56:21 ]
別ドメインのフレームのIHTMLDocument2を取得するにはどうすればよいでしょうか

83 名前:デフォルトの名無しさん [2006/07/15(土) 21:25:02 ]
質問です。
XMLデータをメモリから設定すると、HTMLとして表示されてしまうのですが、
設定するデータの属性を設定する方法があるのでしょうか?
現在は、一度「.xml」な一時ファイルを吐き出してそれを読み込ませる方法にしています。


84 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 22:33:11 ]
ちゅんと doctype 付けてる?


85 名前:83 mailto:sage [2006/07/16(日) 05:13:09 ]
>>84
つけていませんでした。DOCTYPE見ているのですか。
試してみます。どうもです。


86 名前:デフォルトの名無しさん [2006/07/18(火) 03:06:57 ]
前スレででていたUrlMkSetSessionOptionを使って
ユーザエージェントを変更したいのですが、変更されません。
設定するタイミングがあるのかと、いろんな箇所で入れて、
UrlMkGetSessionOptionで取得すると取得される値では変更はされているようでしたが
printenv.cgiなどでみると変更されていません。
分かる方いますでしょうか?




87 名前:86 mailto:sage [2006/07/18(火) 03:12:59 ]
navigator.userAgentが変更されていました。
UrlMkSetSessionOptionは、Javascriptのnavigator.userAgentを変更する関数で、
HTTPプロトコル上のUser-Agentヘッダーオプションは変更しない・・?


88 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 04:43:57 ]
確認君とかで見ると普通に変更されるよ。

89 名前:86 mailto:sage [2006/07/18(火) 05:21:24 ]
>>88
確認君でも見ましたが、変更されていませんでしたが・・・。IE7 XPPro SP2です。
お詳しいようなので、いまさらな質問ですが、
UrlMkSessionOptionは、プログラム内で一度実行したらそれでいいのでしょうか?
実行するタイミング(たとえば、コンポーネントを起動後など)などありますか?


90 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 14:03:25 ]
IEコンポーネントを作った後にUrlMkSessionOptionしてるだけだよ。IE6+XPPro
ただ、こっちはなぜか実行時1回こっきりしか変えられないんだよなぁ・・・。


91 名前:デフォルトの名無しさん [2006/07/21(金) 03:39:22 ]
AxWebBrowserを使用して、画面遷移を自動で行って、処理を行うアプリを
書いているのですが、formのsubmitで、詰まっています。

環境は、XPsp2、IE7β2です。
言語はC#。

ソースはこんな感じ。

IEnumerator forme = myDocument.forms.GetEnumerator();
forme.MoveNext();

mshtml.HTMLFormElement form = (mshtml.HTMLFormElement)forme.Current;

form.submit();

nextProcess();


submitを行い、画面遷移が完了したところで、次の処理(nextProcess())を行いたいのですが、
上記の方法では、次の処理が終わってから画面遷移をしてしまいます。

間で
form.submit();
while(axWebBrowser1.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE);
nextProcess();

とかしても、ステータス判定のところで無限ループが発生してしまい、お手上げです。
どなたか、ご教示ください・・・。


92 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 11:48:53 ]
その nextProcess() をしない場合どうなるの?


93 名前:デフォルトの名無しさん [2006/07/21(金) 20:36:20 ]
IEコンポーネントでとあるHPを表示させているのですが、
そのHPの中でFocus()をしていて、そのHPをプログラム側で読み込むと
表示しているアプリを前面に持っていってしまいます。
(何回もそのHPを更新をするのでその都度前面に来るとかなり鬱陶しいです。)

何とかこれを回避したいのですが何か良い方法はありませんでしょうか?
Win2000+VC6.0+IE6です。よろしくお願いいたします。


94 名前:デフォルトの名無しさん [2006/07/23(日) 07:46:18 ]
>72
IHTMLDocument2::elementFromPoint

95 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 20:58:42 ]
IWebBrowser.Navigate2(..)の第一引数にマイコンピュータとかのCLSID
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
を文字列で渡す場合、

IE6(XP sp2) だと正常に動作するのに、IE7(Vista β2)だと
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました……」
ってエラーがでるんですが
なんとかなりませんかね?

96 名前:デフォルトの名無しさん [2006/07/24(月) 00:17:00 ]
質問です。
.zipファイル等のリンクをクリックしてダウンロードする際の保存先のパスや、
ファイル名指定ダイアログでキャンセルした等の情報は取れないんでしょうか?




97 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 23:59:32 ]
JavaScriptを実行する方法はありませんか?
DocumentComplete時に初期設定JavaScriptを実行するようにしたいのです。

>>93
荒業で以下のJavaScriptを実行する手もある。
window.focus = function(){ return false; }

98 名前:97 [2006/07/25(火) 00:00:34 ]
質問なのにsageちゃった。せっかくだからage

99 名前:デフォルトの名無しさん [2006/07/25(火) 01:09:45 ]
HtmlElementCollection links = webBrowser1.Document.Links;
foreach (HtmlElement link in links)
とかやってるのですが、linkのなかに含まれる
URLだけを拾うにはどうしたらいいでしょうか?
環境は.net2です。


100 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 04:44:03 ]
IHTMLAnchorElement
get_href

101 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 14:17:33 ]
>>97
>>58のリンク先に載ってる。
だけどVC.NET2003だとサンプル動かないし、COMよくわからないから死にそう。

102 名前:97=58 [2006/07/25(火) 15:14:55 ]
>>101
>>58は俺です(笑。 >>58はJavaScriptのロジックと、C++のロジックを結びつける方法ですね。
>>97の質問は自作IEコンポでどんなページを開いても、開いた最初にinit.jsなどの初期設定JavaScriptを実行したいのです。

>だけどVC.NET2003だとサンプル動かないし、COMよくわからないから死にそう。
サンプル動かなかった?コンパイルは通るけど、なんか赤ばってんのダイアログがでる、
っていう問題だったらキャンセルだか無視ボタンだかを押し続けたら動いたような気がしたけど。
まあ、サンプル動いてもあのソースめちゃくちゃ長いし複雑だったから解析大変だけどね。
JavaScriptのロジックにC++のロジックを埋め込む方法が知りたいのなら軽く解説しますよ。
>>58のリンク先にあるイベントを埋め込む方法は最終的にはわからなかったけど。

103 名前:97 [2006/07/25(火) 15:25:15 ]
と思ったら簡単に見つかりました。
IHTMLWindow2のexecScript使えばいいのね…。

msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/window2/window2.asp
www.ultrasync.net/yofune/?Prog%2FWin32%2FIE%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8#rab3bb29

104 名前:99 mailto:sage [2006/07/25(火) 22:44:41 ]
>>100さん
レスありがとうございました。
IHTMLDocument2 links = (IHTMLDocument2)webBrowser1.Document.DomDocument;

string temp = "";
IHTMLAnchorElement link;
foreach (IHTMLElement lin in links.links)
{
if (lin.tagName.ToLower().Equals("a"))
{
link = (IHTMLAnchorElement)lin;
temp = link.href;
}
}
みたいな感じにしました。

105 名前:93 [2006/07/26(水) 18:39:05 ]
>97
レスありがとうございます。

CComQIPtr<IHTMLWindow2> pHW2;
pDoc->get_parentWindow(&pHW2);
BOOL ret = pHW2->execScript(L"window.focus = function(){ return false; }",L"JavaScript",NULL);

こんな感じでJavaScriptを実行してみましたが、ダメでした。
retにS_FALSEが入り失敗します。何かfocusをさせないうまい方法は無いものでしょうか?


106 名前:97 mailto:sage [2006/07/26(水) 23:17:13 ]
>>105
execScriptの3番目の引数がNULLでは駄目なのでは?
↓これでどうよ?
VARIANT result;
VariantInit(&result);
BOOL ret = pHW2->execScript(L"window.focus = function(){ return false; }", L"JavaScript", &result);

あ、execScriptのサンプルありがとう。




107 名前:97 mailto:sage [2006/07/26(水) 23:19:26 ]
>>105
の前にwindow.focus = function(){ return false; } で要求した動作を満たしてる?
window.focus()メソッドが完全に無効になっちゃうけど、それでもかまわないの?

108 名前:デフォルトの名無しさん [2006/07/27(木) 23:19:27 ]
質問です
やりたい事:Webアプリケーションを自動で操作するスタンドアローンアプリを作りたい

1 フレームがある場合どうすればよい?
2 別ウインドウが開く場合どうする?
3 画面遷移完了はどのイベントを受信することで判る?
4 操作アプリ起動時に、既に開いているIEオブジェクトを取得して操作できる?

よろしくです

109 名前:93 [2006/07/27(木) 23:26:31 ]
97さん
レスありがとうございます。
>106
3番目をNULLではなく、Variant変数を渡したら
retにはS_OKが返ってきました。
しかし、どういうわけかfocusしてしまいます。

>107
取り合えず手詰まり状態なので、何でもやってみようという感じです。

必要なのはHPの中の文字だけなので、HPを表示しているIEコンポは
別Windowにして非表示にしてみたのですが、そのページを再表示すると
その非表示のWindowにFocusがあたって、今まで前面にいたWindowの
Focusが外れてしまいます。うーむ困ったものです。


110 名前:97 mailto:sage [2006/07/28(金) 00:18:29 ]
>>109
再表示した時にもう一度execScript実行してる?
ドキュメントを再読み込みしたら、window.focusの中身はまた元々のfocusメソッドに戻ってると思うよ。
DIID_DWebBrowserEvents2のDownloadCompleteイベントを監視して毎回、window.focus無効にしないと駄目だぜよ。
(DocumentCompleteは再読み込みでは発生しないのでDownloadCompleteイベントがいいです)

111 名前:93 [2006/07/28(金) 23:35:16 ]
>>110
97さん
DownloadCompleteイベント時に常にexecScript()をしてみたのですが
ダメでした。やはりfocusがあたってしまいます。

ちょっと思ったのですが、focusはDownload中にScriptとして読み込まれ、
実行されるわけですよね?だからDownloadComplete時にfocusを無効にしても
遅いような気がしてきました。BeforeDownloadですとDocumentが取れないですし、
これから読込むページのfocusを無効にするのは無理なのかな?という気が
してきました。

あとDownload前に現在のForegroundのHWNDを保持しておいて、DownloadComplete後
保持したHWNDでSetForegroundWindow()をするという方法も考えたのですが
再読込み時に現在前面にいるWindowのfocusが一瞬外れてしまうので、
余り使いたくないですね。

他に何か良い方法が無いものでしょうか?


112 名前:97 mailto:sage [2006/07/29(土) 00:38:29 ]
>>1
>ちょっと思ったのですが、focusはDownload中にScriptとして読み込まれ、
>実行されるわけですよね?だからDownloadComplete時にfocusを無効にしても遅いような気がしてきました。
まぢですか。と思ってやってみたら本当ですね。
私は標準で用意されてるwindowクラスのmoveToやらmoveByなどのメソッド書き換えて、
別の動作にさせたいという要求があったのですが同じ理由で無理そう。

そうなるとちょっと良い方法はわかりません。困りましたw

113 名前:デフォルトの名無しさん mailto:sage [2006/07/31(月) 01:24:46 ]
今まで表示済みのページに対してJavascriptを適用するのに
わざわざDocumentのwriteで書き直しを行っていたのですが、
execScriptなんてのがあったのですね。
大変参考になりました、ありがとうございます。>>103


ちなみに、BSTR型は、ただのワイド文字列とは違うので(先頭が文字列長になっています)
CComBSTR等で包んであげると良いです。

execScript(CComBSTR("window.focus = function(){ return false; }"),CComBSTR("JavaScript"),NULL);


114 名前:デフォルトの名無しさん [2006/08/02(水) 01:30:29 ]
Visual C++で、WebBrowserコントロールを使ってブラウザのようなアプリケーションを作成しています。

作成しようとしているものは、既存のクリック募金のサイトにアクセスして、クリック回数や募金の金額を管理してくれる簡単なアプリです。

対象とするサイトは以下のようなサイトです。

ttp://www.kirin.co.jp/active/env/mizunomegumi/click.html
ttp://clickbokin.ekokoro.jp/belmo.html
ttp://www.thehungersite.com/cgi-bin/WebObjects/CTDSites

クリック時に、WebBrowserコントロールのOnBeforeNavigate2()が呼ばれるサイト
では、OnBeforeNavigate2()でフックする方法が使えると思います。
ただ、一番上のキリンのサイトのようにFlashで書かれたサイトでは、クリック時に
OnBeforeNavigate2()が呼び出されないようで、クリックを検出する方法を
どのようにしたら良いかと悩んでします。

なんか、良いアイディアあるでしょうか?
WebBrowserも、HTMLも、Visual C++も、Flashも詳しくないのでどこからてを付けてよいか困っています。
よろしくお願いします。



115 名前:デフォルトの名無しさん mailto:sage [2006/08/02(水) 17:26:00 ]
自分がクリック(に相当する操作)した回数を数えるんだろ?

116 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 00:32:09 ]
>114
NavigateComplete2イベントなんてどうでしょう?

以下のサイトにDWebBrowserEvents2のイベント説明が載ってるのでいろいろ試してみては?
msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/ifaces/dwebbrowserevents2/dwebbrowserevents2.asp



117 名前:114 [2006/08/04(金) 00:53:49 ]
> 116さん

詳しい説明ありがとうございました。
NavigateComplete2も試してみたんですが、クリックした際に呼ばれないようです。

まだ、理解できていないですが、以下の方法で少しチャレンジしてみようと思います。

相談にのっていただいてありがとうございました。

1)Ethrealでパケットキャプチャして調べたところ、通信をしているのでWebBrowserコントロールで
通信しているパケットを取得して判断。

2)下の方法でクリックのイベントが取れるそうなので、そこからがんばる。

support.microsoft.com/kb/246247/


118 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 17:43:06 ]
指定したリンクが未読か既読か区別する方法ってありますか?
IHTMLAnchorElementではそのようなメソッドがないようです。。。

119 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 21:08:39 ]
>>118
IUrlHistoryStg::QueryUrl

120 名前:デフォルトの名無しさん [2006/08/10(木) 11:11:27 ]
BCC(無料)でIEコンポーネントを使いたいのですが
どこか参考になるサイト等はありますか?

121 名前:デフォルトの名無しさん [2006/08/10(木) 13:29:45 ]
教えない><

122 名前:デフォルトの名無しさん [2006/08/10(木) 16:24:39 ]
マジレス
BCCでは使えない
VC++にしなさい

123 名前:デフォルトの名無しさん [2006/08/10(木) 16:43:24 ]
無理

124 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 17:41:48 ]
Visual C++ 2005 Express Edition は?

125 名前:デフォルトの名無しさん [2006/08/11(金) 10:11:58 ]
BCCでは無理なようですね
ありがとうございました

126 名前:デフォルトの名無しさん mailto:sage [2006/08/11(金) 10:15:09 ]
>>125
たぶんこの方法ならできると思う。VC++固有の機能は使っていないはず。
www.adp-gmbh.ch/win/misc/mshtml/HTMLWindow.html
ATLのDLLを用意できるのなら、このページの方法が使える。
ただしCComPtr/CComQIPtrなどを使わないように改造する必要があるだろうが。
www.nitoyon.com/vc/tips/ie_component.htm



127 名前:デフォルトの名無しさん mailto:sage [2006/08/12(土) 11:58:06 ]
>>126
すごいね。この上のHP。mingwでもできるようだ。BCCでもできるっしょ。
www.adp-gmbh.ch/win/misc/mshtml/MSHTMLTest.zip

128 名前:デフォルトの名無しさん mailto:sage [2006/08/20(日) 19:17:37 ]
ページを更新した(更新ボタンを押す or F5を押す)
というイベントはどう拾えばよいのでしょう?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<145KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef