IEコンポーネントを使い倒すスレ
■ このスレッドは過去ログ倉庫に格納されています
0001IUnknown
NGNGIEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。
=====================================
最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。
※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。
0263デフォルトの名無しさん
NGNGHTMLViewでコンテキストメニューを捕まえたいなら、
IDocHostUIHandler::ShowContextMenu()だね
0264デフォルトの名無しさん
NGNGサンクス
0265デフォルトの名無しさん
NGNGCOM必須だからがんばってね
0266デフォルトの名無しさん
NGNGRFC?
そんなの知らなくても大丈夫だyo!
MFC&WebBrowserコントロールで楽勝
0267デフォルトの名無しさん
NGNGドラッグソースとしてもドラッグターゲットとしても機能させたくないんだけど
0268デフォルトの名無しさん
NGNG何の話だよ?
IEの?
0269267
NGNG0270デフォルトの名無しさん
NGNGドラッグソースになるのを制限する方法はわからない。
もしくは、
IDocHostUIHandler::EnableModelessあたり
0271267
NGNGGetDropTargetでできました 情報ありがとうございます。
(EnableModeless の方は何でしょうか?)
ドラッグソースの抑止を引き続き募集しております
もしご存じの方いらっしゃいましたら情報宜しくお願いします。
0272デフォルトの名無しさん
NGNGどうやってSDKで実装すればいいのでしょうか。
やり方載ってるページあったら紹介してくださいませんか。
0273デフォルトの名無しさん
NGNG表示させたくありません。
どのようにすれば規制できるか試行錯誤していますがなかなか解決できていません。
もし、よろしければご指導お願いします。
よろしくお願いしますm(_ _)m
0274デフォルトの名無しさん
NGNG0275S
NGNG0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG何故過去レスを読みませんか?>>263
0279名無しさん
NGNG0280デフォルトの名無しさん
NGNGRange: bytes=10- とかコンテンツを途中から取得したり
するためにHTTP requestヘッダをいじりたいんだけど
どうしたらいい?おしえて、おねがい!
0282280
NGNGサンクス。
でも、プロキシとか使わずに
IEがリクエストを生成するときにフックされる形で
プログラムがリクエストを生成することはできないかな?
ちなみに、当方Win32SDKでやっております。
でIWebBrowsers2へのポインタも取得はできてます。
わかる方がいらしたら、教えてくださいまし。
0283デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG0286280
NGNG0287デフォルトの名無しさん
NGNGかちゅ用のwsock32.dllのソース公開されているから
参考にしてみたら?
0288デフォルトの名無しさん
NGNG変換などをし、WebBrowserオブジェクトに表示させる
(各種2chブラウザみたいな方向。当然、img src等も
必要なら自前で処理する)
つーか、283ができねーようなら、これ以下は無理だろーが。
・間にパケットをいじるようなルータを入れる(自作)
・debugAPI等で、DLLをダイナミックパッチする
なんかの方法もあるな。
0289デフォルトの名無しさん
NGNGあれはUser-Agent指定できるし。
0290デフォルトの名無しさん
NGNGAPP
だな。
0291280
NGNGksockのソース見てちょっといじってみるよ。
0292デフォルトの名無しさん
NGNGそれに対してGetLocationName(またはURL)すると、当然test.htmが
取得できますが、ユーザー操作(リンククリック)によって
test.htmの中にあるリンクページ(link.htm)にジャンプしてから、
GetLocationNameすると、link.htmが得られそうなのに、
test.htmが戻ってきますね。
Webオブジェクトに現在表示されている最新のURLを取得する方法はありますか?
0293デフォルトの名無しさん
NGNGウィンドウのリサイズイベントを取得する方法ってありますか?
DWebBrowserEvents2って
リサイズのイベント発行しないみたいなんですよね。
0294デフォルトの名無しさん
NGNG教えてください
0295デフォルトの名無しさん
NGNGスタンダードに、
ローカルなプロキシを作るのがよい。
0296デフォルトの名無しさん
NGNGつか、donutのソースでも読んだら?
0297294
NGNG見たのですが難解でした。どなたかヒントください!!!
かなり、沼にはまってます
0298デフォルトの名無しさん
NGNGまず聞きたいのは、donutのアドレスバーは、
君の望む動作をしたのか、ってことだ?
#まさか、該当htmファイルがフレームとか‥‥
0299267(本物)
NGNG0300297
NGNGす、するどい
フレームです。これが問題かも。
動作そのものは、GetLocationURLで問題なさそうですね。
となると、どう対処すればよいのやら・・・
0301デフォルトの名無しさん
NGNG0302298
NGNG>300
DWebBrowserEvent2::BeforeNavigate2あたりを捕まえるとか。
0303デフォルトの名無しさん
NGNGhtmlのレンダリングはDOM使って地道に組み立てるなりinsertAdjacentHTMLするなりで何とかなりそうなのですが、
画像のレンダリングはちょっと検討つきません。imgエレメントの読み込みを捕まえても仕方ないですし。
0304298
NGNG<img src="memory://id48885251">とかやるとか。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG自分でプロトコルを実装するには
・レジストリに書き込んじゃう(OSグローバルなプロトコルになる。memory://....)
・IInternetSession::RegisterNameSpaceで一時的に登録する(アプリケーションローカル。プロトコルじゃなくてnamespaceが操作対象。http://memory/...とかやるのかな?)
という2つの方法があるっぽいです。
詳しくは下記URLで。
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/pluggable/overview/appendix_a.asp
まだ全然コード書いていないので、詳しい検証はしていません。
「IInternetSession RegisterNameSpace」でGoogleして26件しか見つからん・・・
0307デフォルトの名無しさん
NGNGPluggable Protocol Handlerを実装しちゃうと、
普通のホムーペからも呼び出せちゃうから、
セキュリティホールが空かないように気をつけてね。
0308デフォルトの名無しさん
NGNGP板の人ならと思い。。。
>セキュリティゾーンって幾つかあるけど新しく作ることは出来ないの?
>信頼済みは全て許可にしてるけど、スクリプトだけ許可したゾーンを
>作りたいんだよね。
わかりますか?
0309デフォルトの名無しさん
NGNGHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\
レジストリでここに新しいゾーンを書き込んでみましたがダメでした。
ちょっと無理っぽいです。
0310デフォルトの名無しさん
NGNGそれだとしたら、HKEY_CURRENT_USERの方じゃないか?
いや、試した訳じゃないけど。
0311310
NGNG0312デフォルトの名無しさん
NGNGなにか良い方法ありませんか?
DHTMLで取ろうと思ったのですが、内容が変化した事を知る方法がわからないです・・・
0313312
NGNGbye
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNGこれはどれのコンポーネントに実装されているのでしょうか?
また、なんてメソッドでしょうか?
0316デフォルトの名無しさん
NGNGそれ、IEじゃなくない?
0317デフォルトの名無しさん
NGNGよくわからないけど、ぱっと見で、
SHDOCVW.DLLの
DoFileDownloadかDoFileDownloadEx関数で出来そうな感じがする・・・
0318315
NGNGど…どうやって調べるんですか?
DLLの中から関数を見つけるなんて…
0319デフォルトの名無しさん
NGNGこのソフトで調べられるよ。
http://www.dependencywalker.com/
0320デフォルトの名無しさん
NGNGバイナリエディタで後ろの方を調べる、Win98の頃にあったクイックビューアを使うとか。
0321デフォルトの名無しさん
NGNGGoogleでDoFileDownloadを検索したら、
英語のサンプルがたくさん出てきたよ。
VBで試してみたらうまくいきました。
0322IUnknown
NGNGどうしてもパラメータがわからなかった。Undocumentedのようだし。。。
DoFileDownloadは呼び出しもとのプロセスが終了すると一緒に
終了してしまうが別プロセスで実行させるにはどうしたらいいんだろう?
今もこの2点はわからぬままなのである(未熟)。
0323デフォルトの名無しさん
NGNG> 終了してしまうが
IEのプロセスを終了するとダウンロードダイアログも終了するから
仕様だと思われ
0324デフォルトの名無しさん
NGNGDX7いこうは糞。もうやつに関わらせるなって。
あいつにきいてみろ、それらしいやつうろちょろしてるはずだよ
今頃。
0325デフォルトの名無しさん
NGNG自分らでつくりなおせよってさ。
あいつのまねなんか普通誰もむりだって
とっとと奴につくらせろよなんか、決定的なのを
どうせいまごろばりえーしょん作りに夢中。
他人への教材のつもりらしいが他の奴らには
完成品にしかみえんだろうよ。たぶぶらうざ&
かちゅ全般。にちゃんはひおのてき製作。
・・・あいつの独壇場だよ。
正直やっとれんわ。
0326デフォルトの名無しさん
NGNG本当は目覚しい人類の進歩でなくて氷魚の遺作。
多分メモリ展開解答あぷりにも関わっている奴。
セグメントぶちぬいて、ばいなりいじるのもうやめろと
氷魚にいっとけ!!かなり頭に来た。
日本人ならともかく、あいつは米系列だろう?
俺と同じで。
0327デフォルトの名無しさん
NGNGそれらしいやつさがせ
128bitCPUに関わった奴だよ。
こんなの程度誰でも簡単とかぬかしてるやつだよ
あほ扱いされ過ぎて卑下しすぎ→電波、
0328デフォルトの名無しさん
NGNGIEのコンポーネントっていうとみんなインターネットがらみの話になっているけれど
別にWinInet使うぐらいでもいいわけだから
もうちょっとOLEコンテナとしてのIEについて考えない?
例えばACTIVE-X使うときタイプライブラリーとか使わなくても
いきなりADOとかSAPIとか使えちゃうよね、
あとVBやdelphiと比較してユーザーインターフェース部分
htmlで実装するならばWEBデザイナーが使えるはず
これって基本クラスとして実装したら結構あとらくだと思うんだけど
0329デフォルトの名無しさん
NGNGここのデンパが迷い込んだだけ
脳内あぼーん推奨
http://pc.2ch.net/test/read.cgi/prog/999284410/
0330328
NGNG要はそこそこの性能で動いて、とりあえず法的に問題なくて
気が向いたら高速化できるスペックならいいんじゃない。
だからWININET まんせー
IEコンポーネント まんせー
0331デフォルトの名無しさん
NGNG324-327はデムパだから脳内あぼーんしたほうがいいよという
つもりだったんだけど
0332デフォルトの名無しさん
NGNG表示までの時間を変更するにはどうするんでしょう?
0333デフォルトの名無しさん
NGNG開いたページの大きさに合わせて、スクロールバーの出ないギリギリまで
縮めるようなことはできるのでしょうか。
つまり、そのギリギリのサイズをどうにか取得したいのですが。
環境はC++Builder4です。
0334ねこま
NGNG0335333
NGNGまだちょっと動いてないですが、なんとか出来そうです。
0336333
NGNGIHTMLDocument2* doc;
WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc);
IHTMLElement* body;
doc->get_body(&body);
でBODYエレメントまでは行くんですが、そこから先がどうすればいいのか解りません。
検索していろいろ試してみたのですが body->get_offsetHeight(&lHeight) というのだけ
動きましたがどうも違うようでした。
IHTMLElement2* で宣言できればScrollHeight等が得られそうなのですが、タイプライブラリを
取り込んでも未定義といわれてしまいました。
どなたかアドバイスお願いします。
0337デフォルトの名無しさん
NGNGhttp://n76cd-01p02.ppp11.odn.ad.jp/old/a4950.html
0338333
NGNG実はそのページも見て試行錯誤していたのですが、まだうまくいっていませんです。
MSHTML::IHTMLElement2* pIHTMLElement2;
としても 「MSHTMLは名前空間ではない」とコンパイルエラーになってしまいます。
using namespace MSHTML;
とすると、「Namespace name expected」とエラーになりました。
名前空間に関してはいまいち理解できていません。
IHTMLElementでなんとかできないものかとやっていましたが、どうも
get_offsetHeight,Widthしかないようでした。
mshtml.h を見ても IHTMLElement2自体定義されていないようにも見えるのですが
どうすればいいのでしょう…。PlatformSDKが古いのかもしれませんがサイトに
行ってもスクリプトのエラーでページが表示されずDLできないので困っています。
何か解決策をご存知の方、お願いします。
0339デフォルトの名無しさん
NGNG2.タイプライブラリを取り込んだ後MSHTML_TLB.Hをインクルードしてない。
3.それ以外。なんつったり
0340333
NGNGタイプライブラリは取り込む(の処理)だけでいいと勘違いしていました。
本当にありがとうございます。
>337 のサイトに書いてあったのを参考にこうなりました。ほとんどパクリなのですが…。
long lHeight;
IDispatch* pDisp = WebBrowser1->Document; // TWebBrowser *WebBrowser1;
IHTMLDocument2* pIHTMLDocument2;
pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pIHTMLDocument2);
IHTMLElement* pIHTMLElement;
pIHTMLDocument2->get_body(&pIHTMLElement);
IHTMLElement2* pIHTMLElement2;
pIHTMLElement->QueryInterface(IID_IHTMLDocument2, (void**)&pIHTMLElement2);
pIHTMLElement2->get_scrollWidth(&lHeight);
実はまだ動いていないので、もう少しだけお願いします。
このソースだと一番下のget_scrollWidthの行で読み込み違反が発生します。
同様の症状はDocumentを取得する際にまだそのサイトがロード中だった場合に
発生しましたが、今は一連の処理を READYSTATE_COMPLETE を待ってから
行っているので原因は違うようです。
何か心当たりがありましたら、宜しくお願いします。
0341333
NGNG0342デフォルトの名無しさん
NGNGとか
>get_scrollWidth(→&lHeight);
は単なるtypoなのか?
0343333
NGNG代わりに IID_IHTMLDocument2 にしました。
ttp://isweb23.infoseek.co.jp/computer/wds/html_designer_code.shtml
↑こちらとか参考にしてみたのですが、問題あるかもしれないです。
WidthとHeightは、Widthで書いていたところを>337に合わせるため
Heightに修正したのですがget_scrollWidthだけ忘れていました。
get_scrollHeight(&lHeight)です。
0344IID_IHTMLElement2
NGNG0345333
NGNGおかげさまで無事サイズを合わせることができました。本当に感謝です。
0346
NGNGInternetOpenUrl(m_hInternetSession, URL,"A: a\r\n\tbbbb\r\n", strlen("A: a\r\n\tbbbb\r\n"), INTERNET_FLAG_RELOAD, (DWORD) this);
たしか、タブとかスペースが入ってたら複数行してもいいとHTTP1.1のRFCには書いてあった気がしたんですが、、、
僕の理解間違いかな?
それとも、wininetがサポートしてないだけ?
はたまた、やり方が違いますか?
お分かりになる方、助言をお願いします。
0347デフォルトの名無しさん
NGNG> lpszHeaders
> [in] Pointer to a string variable that contains the headers
> to be sent to the HTTP server. (For more information, see
> the description of the lpszHeaders parameter in the
> HttpSendRequest function.)
タブやスペースとはどこにも書いてませんが。
つーかどういうヘッダを追加したいのか不明。
0348346
NGNGRFCだっちゅうねん。
以下rfc2068抜粋。
HTTP header fields, which include general-header (section 4.5),
request-header (section 5.3), response-header (section 6.2), and
entity-header (section 7.1) fields, follow the same generic format as
that given in Section 3.1 of RFC 822 [9]. Each header field consists
of a name followed by a colon (":") and the field value. Field names
are case-insensitive. The field value may be preceded by any amount
of LWS, though a single SP is preferred. Header fields can be
extended over multiple lines by preceding each extra line with at
least one SP or HT. Applications SHOULD follow "common form" when
generating HTTP constructs, since there might exist some
implementations that fail to accept anything beyond the common forms.
0349デフォルトの名無しさん
NGNG0350346
NGNG応答以前にセッションがNULLになってしまうんですよ。
単純にwininetがひとつのヘッダフィールドをtabで複数行連ねることを解釈できないのかな?
0351デフォルトの名無しさん
NGNG継続行は実際には解釈しないクライアントが多いから1行で書けとどこかで見たぞ
0352デフォルトの名無しさん
NGNG> IDispatch* pDisp = WebBrowser1->Document; // TWebBrowser *WebBrowser1;
333さんに質問です。
このTWebBrowserってどうやって使ってるんでしょう?
私も似たようなことをやろうと思って自分のソースに組み込んでるんですが、「定義されていない識別子です」。
#import <mshtml.tlb>
#include <mshtml_tlb.h>
はとりあえずしてます。
0353333
NGNG[コンポーネント]→[ActiveXコントロールの取りこみ]で、「Microsoft Internet Controls」を
インストールすれば、コンポーネントパネルのActiveXタブにTWebBrowserが現れます。
あとは他のコンポーネント同様にフォームに貼りつけて使ってください。
0354333
NGNGTCppWebBrowserって標準でついてませんか?
0355デフォルトの名無しさん
NGNGどこに記録されてるんでしょうか?
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGExplorer のツールバーに出させないようにするには
どうしたらよいのでしょう?
0358便乗
NGNGどうしたらよいのでしょう?
タスクバー右クリック→[ツールバー(T)|クイック起動]
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGレジストリで
noexplorer=1
0361デフォルトの名無しさん
NGNGまあいいや。
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof si);
si.cb = sizeof si;
CreateProcess("C:\Program Files\Internet Explorer\Iexplore.exe",
"iexplore http://www.2ch.net/",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
0362デフォルトの名無しさん
NGNG///////////////////////////////////////////////////////////////////////////
//
// IPersistStream implementations
//
// This is only supported to allow the desk band to be dropped on the
// desktop and to prevent multiple instances of the desk band from showing
// up in the shortcut menu. This desk band doesn't actually persist any data.
//
STDMETHODIMP CDeskBand::GetClassID(LPCLSID pClassID)
{
*pClassID = CLSID_SampleDeskBand;
return S_OK;
}
STDMETHODIMP CDeskBand::IsDirty(void)
{
return S_FALSE;
}
STDMETHODIMP CDeskBand::Load(LPSTREAM pStream)
{
return S_OK;
}
STDMETHODIMP CDeskBand::Save(LPSTREAM pStream, BOOL fClearDirty)
{
return S_OK;
}
STDMETHODIMP CDeskBand::GetSizeMax(ULARGE_INTEGER *pul)
{
return E_NOTIMPL;
}
■ このスレッドは過去ログ倉庫に格納されています