5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :IUnknown:2001/02/23(金) 21:07
=====================================

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

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


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

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


428 :デフォルトの名無しさん:02/04/12 20:55
>>427
(;´д⊂  イジワルシナイデオシエテヨ

429 :デフォルトの名無しさん:02/04/13 14:18
>>428
http://tohoho.wakusei.ne.jp/www.htm
おれはここのを参考にしたけど

430 :デフォルトの名無しさん:02/04/13 15:16
>>426,428
IE5.5以降ではリソース節約&高速化のために、内部の描画をすべて独自に行って
います(以前はフレーム分割では複数のウィンドウが生成されていたが、今は1つの
ウィンドウで同等の処理が行われる)。
スクロールバーなども標準のコントロールを使わず、IEの独自描画です。

ということで、>>427に1票。

431 :428:02/04/13 18:26
>>427-430
そっかー、どうもありがとう(@´ー`@)

432 :デフォルトの名無しさん:02/04/20 23:41
SSL通信しているときのサーバ証明書を取得したいんですが、
わかりませんか?右下のアイコンをクリックすれば見れるんで
取れると思うんですが。

433 :デフォルトの名無しさん :02/04/21 00:41
>>420
レジストリをabout:blankで検索するとIEの設定に
C:\WINNT\System32\blank.htm
ってあるけど動的に作っているのか実際には見つからない。

わからないので空のHTMLファイルを表示してお茶を濁してるけど、
これだと普通のページを表示するのと同じだからイベントの処理が必要に
なって面倒だね。

誰かいい方法を教えて。

434 :デフォルトの名無しさん:02/04/21 15:10
CHtmlViewで「ダイアルアップの接続」を出す方法と
「戻る」「進む」が有効かどうか調べる方法を教えてください。
「ダイアルアップの接続」はオンラインの状態でネットにアクセスすると自動的に出ますが
接続をキャンセルすると(オフライン状態にすると)以降は出てくれません。
IEだと「オフライン作業」を解除してオンラインにして他のページを表示したり更新すれば
「ダイアルアップの接続」が出ますが CHtmlView だと出ません。
オフラインの切り替えは SetOffline で行っているんですが間違っていますか?


435 :デフォルトの名無しさん:02/04/21 21:20
>>434
[InetSDK] WebBrowser コントロールでの [進む] と [戻る] ボタンの使い方
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp163%2F2%2F82%2Easp&LN=JA

436 :デフォルトの名無しさん:02/05/01 21:42
さげ

437 :デフォルトの名無しさん:02/05/17 09:45
COMスレから紹介されてやってまいりました。どうか力をお貸しくだせえ。

[やりたいこと]
1. MFCアプリでHTMLファイルからHTMLドキュメントオブジェクトを作成。
2. そのオブジェクトにDOMのメソッドで変更を加える。
3. 変更結果をファイルに保存。

で,いくつか方法を試してみたのですがなかなかうまくいきません。

A. HTMLエレメントからIHTMLElement::GetouterHTML()で文字列を取り出して
CFileを使ってがりがり書く。
→モトのHTMLファイルのエンコーディング方法に合わせてエンコードしなくては
いけないので気が遠くなりそう。

B. HTMLドキュメントからIPersistFileを取得してSaveメソッドで保存。
→なぜか変更前の状態で保存される。

C. それならばともうひとつHTMLドキュメントをCoCreateInstanceして
モトからinnerText()で取得した文字列をwrite()で書きこむ。
→書き込み中にスクリプトエラー。onloadでしかスクリプトは呼ばれないはずなのに…。

D. じゃあこれでどうだとwrite()ではなくinsertAdjacentHTML()で
ドキュメントを複製してIPersistFile::Save()。
→insertAdjacentHTML()を呼ぶ前の状態で保存される。

E. ためしにIHTMLDocument2::execCommand( "SaveAs" )で保存。
→MSHTML.DLLからアクセスバイオレーションが飛んでくる。
ブラウザウィンドウが存在しないから?

というわけで万策尽き果てた気分です。どーにかならんでしょうか。
「こういうメソッドはどうよ?」くらいでもいいのでアドバイスもらえると嬉しいっす。

438 :デフォルトの名無しさん:02/05/17 14:29
A. HTMLエレメントからIHTMLElement::GetouterHTML()で文字列を取り出して
CFileを使ってがりがり書く。
→モトのHTMLファイルのエンコーディング方法に合わせてエンコードしなくては
いけないので気が遠くなりそう。
---
そんなにむつかしい/面倒くさいことか?



439 :437:02/05/18 09:11
>>438 日本語以外のエンコーディングも使われる可能性大なんでちとヘビーかなと。
いざとなったら「何語だろうとUnicodeでしか出力しない!」つって逃げますけど…ちょっとカッコワルイ。

440 :デフォルトの名無しさん:02/05/23 01:52
>>437
DISPID_AMBIENT_USERMODEでデザインモードに切り替えないと
保存できないような気がするYO;

441 :437:02/05/23 08:56
>>440 サンクス。WebBrowserはhostしてないもんでEdit云々の発想はなかったな。
とりあえずやってみよう。

442 :437:02/05/23 10:45
ファイル読み込み前にIHTMLDocument2::put_designMode("On")したらでけました。
440 は神!
しかしちゃんとHTMLドキュメントにアプリをAdviseしたのにIAdviseSink::OnSave()もOnRname()も呼ばれない。
呼ばれないのにIPersistFile::Save()はナニゴトもなく終わっている。
…いいのか?

443 :デフォルトの名無しさん:02/06/02 11:21
OnBeforeNavigate2がアドレス入力から来たかそうでないかを
判定する方法はありますでしょうか?

444 :デフォルトの名無しさん:02/06/02 13:57
>>443
レジストリのアドレス入力の履歴を調べればいい。と思う。

445 :443:02/06/02 19:38
ありがとう。
やってみます。

446 :デフォルトの名無しさん:02/06/03 11:11
Document.body.innerHTML
で表示中のHTMLを取得して、
Document.write
で出力というのを繰り返すと、
どんどんHTMLが崩れていくんですが何故でしょうか。
なんかヘッダの中のスタイルシートが消滅したり、へんな位置で改行が入ったり。

447 :デフォルトの名無しさん:02/06/04 14:00
>>446
innerだからというオチじゃないよね。

448 :デフォルトの名無しさん:02/06/04 22:43
>>446
もしかして、sleepとか入れながら、ループでガシガシ追加していますか?
前に、ファイルから少しずつwriteしていったら似たようなことになったことがある。
解決方法は。。。知らない。諦めたから(w


449 :デフォルトの名無しさん:02/06/05 14:36
>>446,448
試してないが、
ReadyStateがREADYSTATE_COMPLETEになる前に
Document.writeするとダメとかかも。

450 :デフォルトの名無しさん:02/06/09 13:46
IEコンポ上で右クリックしたときに表示されるポップアップメニューの表示を抑制する方法ってありますか?

451 :デフォルトの名無しさん:02/06/09 13:59
IDocHostUIHandler::ShowContextMenu

452 :デフォルトの名無しさん:02/06/13 23:19
BHOからコンテナであるIEのアンビエントプロパティを
変更することは可能でしょうか?


453 :デフォルトの名無しさん:02/06/13 23:32
BHOは良く知らないけど、IWebBrowser2を持ってれば
可能だと思う。

454 :452:02/06/14 02:25
>>453
IWebBrowser2 は取れてますので
色々やってみます。


455 :名無しサンプリング@48kHz:02/06/14 12:52
_blank
で新規ウインドウを生成しないようにしたいんですが
どうしたら良いでしょう…(同一ページでリンク先に飛ばせたい)
ちなみに、BCBのTCppWebBrowserコンポーネントです。
ご存知の方がいましたらば情報キボンです!

456 :デフォルトの名無しさん:02/06/15 01:43
ttps://sourceforge.jp/projects/foolsnote/

こんな事やっているやつを発見し、俺と同じくBCB使ってるというから
ソースをダウソしてみたら、BCB6でつくってやんの・・・・・
おれみたいなDQNじゃ、ステップ実行しないとわかないよぉ。

BCB5以下で書かれた、参考になるようなソースどっかにないっすか?


457 :デフォルトの名無しさん:02/06/15 14:34
>>455
VC++なので、BCBでどうなるかは知らないが、
OnNewWindow2で、新ウィンドウの作成をキャンセルした後、Navigate2する。

か、OnNewWindow2で、IDispatch** argな引数の*argに、thisのIDispatch*を
入れて新ウィンドウの作成はキャンセルする。

458 :デフォルトの名無しさん:02/06/15 18:32
>>455
BCB だと、OnNewWindow2 で、Cancel はせずに
*ppDisp = CppWebBrowser1->Application;
でいけるはず。


459 :445:02/06/15 21:18
>>457-458
レス有難うございます!
で、新規ウインドウの抑止は出来たんですが
canselだと飛び先のURLが取得できません。
*ppDisp = CppWebBrowser1->Application;
では現在の窓でリンク先を表示してくれません…。
>>458さんは飛べてますか?


460 :458:02/06/16 20:24
>>459
あれー?うちでは飛べるんだけど。BCB 5 と 6 でテスト。

461 :名無しサンプリング@48kHz:02/06/18 00:11
>>460
BCB5なんですがダメなんですよ…
なんでだ〜
明日BCB6で試してみます!サンクスこ!

462 :デフォルトの名無しさん :02/06/19 11:52
Delphi6 & IE 5.5SP2 ですがやはり ppDisp に自分自身を指定すると
だめです。別のWebBrowserを指定すれば飛ぶんですが。

IEのバージョンは関係するのかな。

463 :458:02/06/19 17:48
>>462 IEのバージョンは関係するのかな。
あ、それかもです。うちは IE5.01。

464 :デフォルトの名無しさん:02/06/19 22:11
5.0と5.5はカナーリ違うという罠。

465 :デフォルトの名無しさん:02/06/29 10:32
IEコンポーネントを使わなくても良いかもしれませんが,
IEのプロクシ設定を取得する方法ってありませんか?

466 :デフォルトの名無しさん:02/06/30 00:31
>>465
レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings


467 :デフォルトの名無しさん:02/07/01 12:14
>>466
サンクスコ

468 :465:02/07/03 00:26
さんきうう

469 :デフォルトの名無しさん:02/07/08 11:08
CComPtr< IOleObject > obj;
obj.CoCreateInstance( L"Shell.Explorer" );
CComQIPtr< IOleClientSite > csite = &implements;
obj->SetClientSite( csite );
obj->QueryInterface( IID_IOleInPlaceObject, (void**)&ipo );
result = obj->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, csite, 0, g_hwnd, NULL);

CComQIPtr< IWebBrowser2 > ie = obj;
CComBSTR url = "about:blank";
ie->Navigate( url, NULL, NULL, NULL, NULL );

CComPtr< IDispatch > pDisp;
ie->get_Document( &pDisp );
CComQIPtr< IHTMLDocument2 > document = pDisp;
if ( document ) {
 CComVariant color( "#000000" );
 document->put_bgColor( color );
 CComPtr< IHTMLElement > body;
 if ( SUCCEEDED (document->get_body( &body ))) {
  assert( body ); ※
 }
}

上のソースで、どうしても※のところでassertに引っかかるんですが、どうしてなんでしょうか?
戻り値はSUCCEEDEDが返ってきているので、正常なはずなのに、どうしてもbodyが取れません。


470 :デフォルトの名無しさん:02/07/08 12:22
assert( &body);
というオチ?

471 :デフォルトの名無しさん:02/07/08 12:50
get_bodyとかはSUCCEEDナのにもかかわらずNULLを返すことがある。

この場合はレンダリングが終わってないか、bodyなんて存在しない
からだと推測。

472 :デフォルトの名無しさん:02/07/08 13:46
>>471
うぃす、どもです。
Navigate直後だから終わってない&about:blankでドキュメントが存在しないって事ですかね。
DocumentCompleteでやれば出来そうですね。

473 :デフォルトの名無しさん:02/07/08 15:59
>>472
てことは、470が指摘したのは469のタイプミスだったのか?
まあ、Navigate直後にDocument取得は正気の沙汰じゃないが。

474 :デフォルトの名無しさん:02/07/08 19:21
お気に入りの順番を保存してる
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites
の構造って既に調べた方います?

ちーともわからなかった。


475 :デフォルトの名無しさん:02/07/08 19:25
つか、donutのソース嫁よ……
mtlweb.hあたりにあるから。

476 :474:02/07/09 21:35
ありがとうです。
早速ソースを googleに助けてもらって見てみました。

typedef struct _tagCFavoritesOrderData
{
DWORD size;
DWORD priority;
ITEMIDLIST idl; // relative idlist
} _CFavoritesOrderData;
MtlWeb.hから抜き出してみると上の構造体に
順番に流し込んでるように思えたんですが

{サイズ(4バイト)→順番(4バイト)→データ}→{サイズ(4バイト)→順番(4バイト)→データ}.....
--------------+-------------------|
                  サイズ

と言う構造と言うことでよろしいんでしょうか?

さらに、この「ITEMLIST」はどういう型なんでしょうか?


C++は勘でしか読めないC#厨なんでごめん


477 :デフォルトの名無しさん:02/07/10 10:09
ShellNamespaceで検索しろ。
簡単に言うと、 c:\app\dirだと
c: app dir それぞれの要素に分かれて、リスト状に繋がれた物。

120 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)