IEコンポーネントを使い倒すスレ Ver.2
- 1 :デフォルトの名無しさん:2006/04/16(日) 21:08:42
- =====================================
IEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。
=====================================
最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。
※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。
(以上、前スレより)
IEコンポーネントを使い倒すスレ
http://pc5.2ch.net/test/read.cgi/tech/982930049/
かなり前のスレですが続編を立てました。
- 476 :デフォルトの名無しさん:2008/04/27(日) 02:28:31
- >>475
メモリリークっていうか、開放し忘れじゃね?
よくあるみたいだよ。
- 477 :デフォルトの名無しさん:2008/04/27(日) 03:49:52
- IEコンポーネントを使うとそうなるって問題もあったはず。
一旦アプリを最小化すると開放されたようになる。
本当にリークしてるのか、本当に開放されてるのか、分からないけどね。
- 478 :デフォルトの名無しさん:2008/04/27(日) 12:15:51
- >>477
最小化すると減るのはワーキングセットの量。
- 479 :デフォルトの名無しさん:2008/04/29(火) 08:38:59
- タスクマネージャーとかで見る使用メモリが増えていくからといって
メモリリークしてるとは限らない。
ttp://kkkon.hp.infoseek.co.jp/tips/MFC/MemoryLeak.shtml
この辺参考にしてみるといいかもね。
- 480 :デフォルトの名無しさん:2008/05/08(木) 17:50:12
- なんかFlash関係が動かなかったりするね。
- 481 :デフォルトの名無しさん:2008/05/08(木) 19:30:41
- IEコンポーネントでページを開くときに、ソケットで別の端末にページのURLを送って
同じページを開かせるようなプログラムを作ったんですけど
CComQIPtr<IWebBrowser2> pWB2
pWB2->Navigate2(メッセージで送られたURL)
としてURLにジャンプしようとすると、
「"URL"が見つかりません。パスまたはインターネットアドレスが正しいかどうかを確認してください。」
というメッセージボックスが表示され、メッセージ受信側のクライアントはURLにジャンプできません。
IEコンポーネントで表示させた、そのURLのハイパーリンクを直接クリックした時や
直接IEを起動してアドレス直打ちをした場合、正しくページに飛ぶことが出来ました。
また、メッセージ受信側がIE7を入れている場合ではジャンプできない現象が起きましたが
IE6を入れているPCで試したところ、メッセージ受信側もジャンプすることが出来ました。
IE7になってからNavigate2周りで何か変更があったのでしょうか。
おとなしくIE6に戻るしかありませんか?
- 482 :デフォルトの名無しさん:2008/05/09(金) 02:27:06
- IEコンポーネントでHTML内に記述されたJavascriptの関数を実行したいのですが、
可能でしょうか?HTMLは自分で用意したものです。
- 483 :デフォルトの名無しさん:2008/05/09(金) 20:27:54
- >>482
できるよ。
スクリプトを動的に追加することができるから追加したコードで静的なコードを実行すればいい。
HTMLを自分で用意するんだったらIEコンポーネントでやる用途が想像できないけど?
- 484 :デフォルトの名無しさん:2008/05/10(土) 04:39:22
- >>483
http://homepage3.nifty.com/LILILIN/HOWTO/activex_javascript.htm
このページの情報を参考にして実装する事ができました。
では逆にHTML側から、ブラウザ(アプリケーション)の関数を実行する事は可能でしょうか?
さすがに無理ですかね、それは・・・
- 485 :デフォルトの名無しさん:2008/05/10(土) 06:30:53
- >>484
window.external経由ならわりと楽勝で。
- 486 :デフォルトの名無しさん:2008/05/18(日) 09:43:36
- IE拡張(BrowserObjectHelper)からマイドキュメントフォルダにファイル書き込んでるんだけど
IE保護モードがじゃまして書き込めねぇ・・・
いくつかMSのサイト読んでレジストリいじったりしたが、相変わらず駄目だ
誰かやり方おしえて。
- 487 :デフォルトの名無しさん:2008/05/18(日) 12:21:05
- アウトプロセスのCOMサーバでも作ってデータ送って書き込ませれば?
- 488 :デフォルトの名無しさん:2008/05/19(月) 09:31:02
- それは最後の手にしたいな。
http://www.microsoft.com/japan/msdn/ie/general/protectedmode.aspx
書き込み時に、ブローカープロセスの昇格ってのが出るようにできるっぽいけど、
ここにあるようにレジストリに書いたがうまくいかん。
- 489 :デフォルトの名無しさん:2008/05/19(月) 09:37:46
- ああ、COMサーバーのCLSIDを登録するってことなんだな、これは・・・
うう、めんどくせー
- 490 :デフォルトの名無しさん:2008/05/23(金) 14:42:17
- 「ページ内検索」がでねーよ
誰か知ってる?
失敗例:
::SendMessage(browser.GetSafeHwnd(), WM_KEYDOWN, VK_CONTROL, 0);
::SendMessage(browser.GetSafeHwnd(), WM_KEYDOWN, VK_F, 0);
::SendMessage(browser.GetSafeHwnd(), WM_KEYUP, VK_F, 0);
::SendMessage(browser.GetSafeHwnd(), WM_KEYUP, VK_CONTROL, 0);
- 491 :デフォルトの名無しさん:2008/05/23(金) 19:58:46
- >>490
HTMLID_FINDでググれ
http://support.microsoft.com/?scid=kb%3Ben-us%3B175513
- 492 :デフォルトの名無しさん:2008/05/27(火) 02:44:37
- ダイアログに WebBrowser を 貼り付けて 表示しています。
その ページ内で window.close() を 呼んだら
ダイアログ自体を終了するようにしたいのですが、 WebBrowserEvents
のイベントを取得するような方法しかないのでしょうか?
- 493 :デフォルトの名無しさん:2008/06/07(土) 17:33:24
- ローカルにある js ファイル ページ表示後に実行したいので、
DWebBrowserEvents の Document Complete 後に
Document に script タグを追加しようとしているのですが、
追加されません。
このやり方だとだめなのでしょうか?
どこかにサンプルがあったりしますか?
- 494 :デフォルトの名無しさん:2008/06/13(金) 19:11:21
- Win32APIすれから来ました
HTMLを解析したいのでIHTMLDocument2を使おうと思っています
CComPtr<IHTMLDocument2> aDoc;
aDoc.CoCreateinstance(CLSID_HTMLDOCUMENT);
aDoc->put_URL(CComBSTR("http://~")); //URLの読み込み(のつもり)
aDoc->get_images()
この put_URL を使うとブラウザで引数のURLを開いてしまい、また、get_imagesで取得したイメージコレクションのサイズが0になっています。
まず、「ブラウザを開かないでHTMLを解析したい」のと、「get_images で取得できていない」理由がよく解りません。
コマンドラインから使うツールのつもりなのでCUIの方がうれしいのですが、ダイアログかなにかで表示させる必要があるのでしょうか?
#イメージとしてはURLを引数で渡すとそのページのIMG src="***" を抽出するプログラムです。
- 495 :デフォルトの名無しさん:2008/06/13(金) 19:23:39
- >>494
ここにサンプルがあったよ
ttp://d.hatena.ne.jp/seraphy/20061124#p3
- 496 :デフォルトの名無しさん:2008/07/23(水) 00:24:40
- IWebBrowser2から作ったIEコンポーネントで、フラッシュゲームのページでゲームのキー入力が
効きません助けてください!
IOleInPlaceActiveObject::TranslateAcceleratorもメッセージループ内に入っています!
- 497 :デフォルトの名無しさん:2008/07/23(水) 09:21:35
- そういや俺もニコニコとかのフラッシュ使ったページでキー入力効かなかったことがあったな。
どうやって解決したか思い出したら書き込むよ。
- 498 :デフォルトの名無しさん:2008/07/23(水) 11:55:03
- 質問です。
戻る、進むことが出来るか否かを判断するにはどうすればいいんですか?
IWebBrower2のメソッドにそれらしき関数が見当たらなかったんだけど
- 499 :デフォルトの名無しさん:2008/07/23(水) 20:05:14
- DWebBrowserEvents2のCommandStateChangeかなにか
- 500 :デフォルトの名無しさん:2008/07/24(木) 18:42:51
- >>499
遅レスですがありがとうございました!
- 501 :デフォルトの名無しさん:2008/07/24(木) 20:13:24
- VC+ATLでタブブラウザっぽいものを作っています。
DWebBrowserEvents2のDISPID_NEWWINDOW2イベントで、
新しく開く遷移先のアドレスを知るためにはどうしたらいいんですか?
OnNewWindow2のハンドラでIEが立ち上がるのをキャンセルするまでは分かったんで巣が。。
Donutのソースみたけどいまいち分かりませんでした・・・
- 502 :デフォルトの名無しさん:2008/07/25(金) 19:21:06
- NewWindow3にしちゃうのは?
- 503 :デフォルトの名無しさん:2008/07/28(月) 14:53:44
- WSH/VBScriptからNewWindow?でcancelできない?
- 504 :デフォルトの名無しさん:2008/08/08(金) 20:08:34
- IE6が入っているPCでは問題なく動作しているプログラムが
IE7が入っているPCで正しい動作をしてくれません。
ttp://www.nitoyon.com/vc/tips/ie_component.htm
このサイトを参考にC++(VC++)でIEコンポーネントを呼び出しています。
調べてみると、どうやらIE7でNavigate2を呼び出すと
正しくページに移動できないみたいですね。
色々調べてみたんですけど、VC++でのIEコンポーネントの使用で
IE7に対応させるような方法が分かりません。
IE7環境でVC++からIEコンポーネントを呼び出して
正しくページ移動できるようなプログラムは可能でしょうか。
- 505 :デフォルトの名無しさん:2008/08/09(土) 16:49:59
- しらんけど↓でなんとかならんかのお
Microsoft Web Browserコントロールのセキュリティを制御する:CodeZine
- 506 :デフォルトの名無しさん:2008/08/09(土) 18:40:03
- ページから移動するんじゃなくて、ページごとに作り直すといいんじゃない?
- 507 :デフォルトの名無しさん:2008/08/27(水) 22:13:09
- >>504
AtlAxCreateControlExを使用した方法だとうまくいきますよ。
- 508 :507:2008/08/27(水) 22:19:03
- >>504の詳細を聞かずにレスしたので、思っているのとは違う結果になるかもしれない。
補足すると、タブを使用しない。キオスク端末見たいなことをやりたければ、
AtlAxCreateControlExを使用した方法で作れます。
- 509 :デフォルトの名無しさん:2008/08/31(日) 16:14:38
- IE7でアクティブなタブがshellwindowsのどれか、わかりますか?
- 510 :デフォルトの名無しさん:2008/09/14(日) 12:25:13
- VC6 + MFCで開発してます。
IDispatchExの利用方法で分からない事があります。
IEコンポーネントのGetDocument()で得られるIHTMLDocument2をQIして
IHTMLDocumentを取得しました。
さらに、get_Script()で得られるIDispatchをQIし、IDispatchExを
取得しました。
こうして得られたIDispatchExを利用して、HTMLのオブジェクトにアクセス
可能な事を確認しました。しかし、JavaScriptで
window.hoge = 1;
foo = 2;
と書いてある場合、hogeにはアクセス出来ますが、fooにはアクセスできません。
windowオブジェクトに明示的に代入したオブジェクトにしかアクセスできない
ようです。
どうすれば、fooにアクセスできるでしょうか。
- 511 :デフォルトの名無しさん:2008/09/21(日) 12:02:52
- >>510
厳密に調査したわけではないが、アクセスタイミングによるものだと思う。
windowオブジェクトは、初期状態で存在しているため、
直にアクセスできるのだと思われる。
全てのイベントを拾って、ポーリングすればアクセスできるタイミングが分かるはず。
試しに html側 head内にてvar i=1000を定義、body onloadにて、
iを初期値と比較して結果を出す関数を作成。
全てのイベントを拾って、GetDispID( 変数名, fdexNameCaseInsensitive, &dispID )
を実行して、DISPID_UNKNOWN != dispIDが成立したら関数InvokeExにて値を変更したら
onload関数の結果が変わるのを確認した。
- 512 :デフォルトの名無しさん:2008/09/26(金) 12:43:09
- javaのwin32oleでブラウザ作ってるんですが
表示中のHTMLの任意のタグの内容を取る方法って何ですかね?
例えばクリック→srcElement取得ってどうやったらいいのか・・・。
- 513 :デフォルトの名無しさん:2008/09/27(土) 01:17:13
- win32oleを使用したことが無いので詳しくは分からないが、IHTMLDocument2のI/Fが取れれば、
メンバ関数elementFromPointでできると思う。
- 514 :デフォルトの名無しさん:2008/09/27(土) 22:09:26
- IE7 + Vista + 保護モードだと、BHOからファイル書き込みが
所定のパスにできないですよね。
これを解決しようと奮起してます。
ファイル書き込み部分をCOM化しようとしてるんですが、
どうにもうまくいきません。
http://msdn.microsoft.com/en-us/library/bb250462.aspx
ここを読んだんですけど、
If your extension launches a COM server
that is not registered in HKEY_CLASSES_ROOT,
gets dynamically registered through COM and launched via CoCreateInstance,
add a REG_SZ value called IID containing the CLSID of the COM server,
add the following setting to your policy.
IID (REG_SZ) contains the CLSID of your extension.
これって、BHOのCOMコンポーネントのCLSIDを
レジストリのElevationPolicy以下に登録するんじゃないんですかね。
ファイル書き込みのCOMを生成した瞬間にダイアログが出ることを期待してるんですが、
ぜんぜんそうなりません。
- 515 :514:2008/09/27(土) 22:11:01
- ファイル書き込みのCOMはBHOと同じDLLに含まれてます。
ファイル書き込みのCOMを別のEXEサーバーにおいて、
BHOから呼び出したんですが、COM生成はできても、
ちょっとするとEXEサーバーから勝手に切断されてしまいます。
どうしていいのか、さっぱりわかりません・・・
- 516 :512:2008/09/30(火) 09:54:56
- >>513
ありがとうございます
やってみます
- 517 :hiro:2008/10/08(水) 14:47:16
- こんにちは。
http://www.nitoyon.com/vc/tips/ie_component.htm
のサンプルコードを落として VS.net 2003 Standardで
開いてビルド実行、アドレスバーに打ち込んでGOを押しても
メッセージが出て(atlcomcli.h Line148)で
実行時にエラーになります。
comは初心者でよく分かりません。
どなたか対処法をご存知ないでしょうか?
どうかよろしくお願いします。
- 518 :デフォルトの名無しさん:2008/10/08(水) 17:40:03
- >>517
そこの「VC++.NETでの注意点」ってとこ読んだか?
- 519 :hiro:2008/10/08(水) 18:50:31
- はい、読みました。
昔会社でやってた頃、VC6.0のときは作動できたのですが、
なぜか自宅のVC++.net 2003 Standardではエラーが出るのです。
- 520 :デフォルトの名無しさん:2008/10/09(木) 16:40:56
- >>519
該当サイトのサンプルをダウンロードして、VC6ではOKだっが
VS2005 PROでは駄目だね。
atlライブラリか、ActiveXの扱いの問題か。
少し試したが原因が分からないので、ソースを修正してた。
以下ソースを参考にしてみてくれ。
リソースエディタで、ActiveXコントロールを削除して、
STATICテキストを任意サイズにし、コントロールIDを"IE_WINDOW"と設定する。
そして、main.cを以下のようにコード修正
int WINAPI WinMain
省略
::CoInitialize(0);
// ATLモジュールを初期化します。
省略
// ATLモジュールの後始末です。
_Module.Term();
::CoUninitialize();
省略
// ActiveXコントロールのインターフェースを要求します。
//if (AtlAxGetControl(GetDlgItem(hDlg, IDC_IE), &punkIE) == S_OK)
{
HWND hwnd = 0;
hwnd = ::GetDlgItem( hDlg, IE_WINDOW );
if ( 0 != hwnd )
{
::AtlAxCreateControlEx( OLESTR( "{8856F961-340A-11D0-A96B-00C04FD705A2}"), hwnd, 0, 0, 0, IID_NULL, 0 );
::AtlAxGetControl( hwnd, &punkIE );
}
省略
- 521 :デフォルトの名無しさん:2008/10/11(土) 22:58:55
- html 関連の質問です。
VC++ 2005、WinXPでプログラムを組んでいますが、あるhtmlファイルからanchorタグを読み込み、リンク先のページを取得したいと思います。
一々、自作のライブラリでリンク先を検出するようだと、作成時間がかかって仕方ないので、どなたか、htmlをパースしてリンク先のアドレスを取得できるような
ライブラリや関数などをご存知の方、教えていただけないでしょうか?
----
c++相談室から誘導されてきました。
よろしくお願いします。
- 522 :デフォルトの名無しさん:2008/10/11(土) 23:10:07
- その程度の用途でIEコンポーネントなんか使ったら余計時間かかる気がするが。
正規表現かなんかで抽出したほうがはやくね?
- 523 :デフォルトの名無しさん:2008/10/11(土) 23:18:16
- マジっすか……
正規表現だとboost辺りかな……
とりあえず、boost使ってみることにします。
どうもありがとうございました
- 524 :デフォルトの名無しさん:2008/10/12(日) 13:17:44
- BHOを作ってるのだが、
VSのプロジェクトのプロパティ>構成プロパティ>デバッグ>コマンド
にiexplorer.exeのパス書いて、デバッグ実行すると、
IEが起動して自動的にアタッチしてくれる。
それはいいんだが、なぜかそうやって起動するとIE7+Vistaでの保護モードが無効になってしまう。
その状態でインターネットオプション見ても保護モードにチェックは入ってるのに。
普通にIE起動したら保護モード。
誰か理由説明できる人いる?
- 525 :デフォルトの名無しさん:2008/10/12(日) 14:12:10
- その状態で2ch見ても保護モードにならんの?
139 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
Windows Media 9 Series その19 [DTV]
JavaScriptを教えてもらう [WebProg]
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/09/25 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)