1read 100read
2011年10月1期プログラムIEコンポーネントを使い倒すスレ Ver.2
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
誰かがものすごいソフトの名前を勢いで考えるスレ
フリーソフトなどに使われる言語は?
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
学んで損したプログラミング言語
IEコンポーネントを使い倒すスレ Ver.2
- 1 :06/04/16 〜 最終レス :12/01/09
- =====================================
IEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。
=====================================
最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。
※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。
(以上、前スレより)
IEコンポーネントを使い倒すスレ
http://pc5.2ch.net/test/read.cgi/tech/982930049/
かなり前のスレですが続編を立てました。
- 2 :
- 前スレの過去ログ
http://pc5.2ch.net/tech/kako/982/982930049.html
- 3 :
- 関連スレ(俺の独断と偏見)
【OLE】オートメーション総合スレ【ActiveX】
http://pc8.2ch.net/test/read.cgi/tech/1137771139/l50
Win32API質問箱 Build42
http://pc8.2ch.net/test/read.cgi/tech/1144962549/l50
ATL/WTL Part4
http://pc8.2ch.net/test/read.cgi/tech/1134388951/l50
Donut開発情報交換スレ(DAT落ち)
http://pc8.2ch.net/test/read.cgi/tech/1096194187/l50
- 4 :
- >>3
FW2.0にはwebbrowserコントロールあるし、IEコンポーネントプログラミングなんてもう必要無いんじゃまいか?
- 5 :
-
- 6 :
- たしか、Part 2があったはずなんだけど
いやーごめんなさいでブッとばされて、それっきりになったんだっけ?
- 7 :
- まさか今になって次スレが立つとは。うれしいなあ。
>>1の英断に乾杯。
- 8 :
- このままDAT落ちしそう
- 9 :
- 4ヶ月ほっとかれても落ちないみたいだから
だいじょぶなんでない?
テンプレ?に追加
わからないことがあったらとりあえずググっとけ
http://google.co.jp/
調べてるうちに英語のページが出てきても、
そこに書いてあるメソッドやらIDやらでググればいい
- 10 :
- ageてもいいよね
- 11 :
- IE7β2インスコした記念age
- 12 :
- 記念質問
プロセス内の変数(WinMainとかで宣言した変数)を、
IEコンポーネントの中のJavaScriptから参照することはできますでしょうか?
int main(void){
int count = 0; // ←例えばこういう変数をJavaScriptで直接参照したい
}
データの算出はC++で書いて、
そのデータの表示はHTML+JavaScriptでやりたい感じなのですが・・・。
- 13 :
- >>12
無理。
- 14 :
- HTMLでデータを表示するなら自前でHTMLファイルを書き出して表示とか。
- 15 :
- >>13-14
やっぱりっすか。
変数の中身は動的に変化するものなので、
というか時間を管理する変数なので随時C++で更新かけつつ、
JavaScriptでアクセスして表示させたいのです。
Sleipnirでは、現在のアドレスバーとか検索バーの文字列を
取得するActiveXオブジェクトがあるので、そっちの路線で調べて見ます。
http://www.sleipnir-wiki.jp/index.php?Sleipnir.API%20%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9
- 16 :
- COMっていうことになるのかなぁ。
- 17 :
- 正にIEコンポーネントを使い倒せばできるはず。
(倒さなくてもできるとは思うけど)
- 18 :
- >>12
できます。
- 19 :
- >>17
>>18
IActiveScript?
- 20 :
- ちがう
- 21 :
- 確か、MSDN にそのものずばりの HOWTO があったような記憶が・・・
今手元に MSDN が無いのでなんとも言えないけど。
WEB 版は、変わっちゃったんだね。
- 22 :
- MSDNとかざっと見たけど分かんないっす。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1371&forum=7
- 23 :
- >>12
>プロセス内の変数(WinMainとかで宣言した変数)を、
>IEコンポーネントの中のJavaScriptから参照することはできますでしょうか?
横レスですが
IHTMLDocument::get_Script()とかいう話ではない?
ただ「JavaScriptから変数を参照する」というより
アプリ側から引数として渡すような形になるけど
頓珍漢なこといってたらごめん。
- 24 :
- 22のリンク先はIHTMLDocument::get_Script()で行けるのかも…。
ScriptEngineが取得できれば、IActiveScript->AddNamedItemあたりで
アプリ側から名前付きオブジェクトを渡せるから行けるんではと思うけど、
にしても、17,18,20の回答(正解)が気になる…。
- 25 :
- Win32API質問箱で質問した者ですが、誘導されたので改めて質問させて頂きます。
WinXP SP2のIEで、ダウンロードが自動的に始まるページへ移動すると
"セキュリティ保護のため・・・"
と表示され、自動的にダウンロードが行われないようになっていますが、
IWebBrowserを使用したIEコンポーネントで同じような機能を実装するには
どうすれば良いのでしょうか?
よろしくお願いします。
- 26 :
- たぶんリダイレクトするときにイベントが来るからDWebBrowserEvents2を実装してみる。
あくまでもたぶん。
- 27 :
- >>16-24
お返事遅れてすいません。
IActiveScript->AddNamedItemで、スクリプトにCでのコード埋め込みができそうですね。
調べる限り、それをやるにはコードが相当複雑そうですが(^^;
ありがとうございました。
>>25
あっ、>>836だ。
- 28 :
- なんかIE7βにしてからIEコンポーネント使ったソフトの挙動がヘンなんだが。
- 29 :
- さすがはM$
- 30 :
- 仕様が変わってるのだから仕様が無い。
- 31 :
- だれが上手いこと言えとw
- 32 :
- >>28
IE7b2はデフォルトでローカル(メモリやファイルシステムにある)なhtmlで
アクティブスクリプトを有効にしないようになってるからじゃ○マイカ。
- 33 :
- >>32
そうだったノカー(AA略)
サンクスコ!
- 34 :
- >>32
IE6sp2からそうじゃなかった?
- 35 :
- age
- 36 :
- IDispatchってなによですぱっちって。なんなのよーこれなんなのよー
- 37 :
- >>36
同士よー!
IDispatchってなによですぱっちって。なんなのよーこれなんなのよー
なんか、クラスインスタンスをクラスで表しちゃったようなインターフェース。って感じだと思う。
っていうか、俺もIDispatchについて聞きたいんだけどここじゃスレ違い?
- 38 :
- マルチポストになります。ごめんなさい
はじめVBで探していたのですが、もっと適切なスレがあったので
すいませんが、質問させてください。
サーバと通信するクライアントを作成するのに
WebBrowserControl(Maicrosoft Web Browser)(正しくはTridentらしい)を
利用してやり取りしようとしています。
入力したデータをdoPostで送っているだけなのですが、
サーバ側で見るとdoGetとdoPostの両方で来ています。
漏れの認識では少しのデータを送るときdoGet
大量のデータを送るときdoPostをりようしていると思っています。
なんで、doPostだけで送ってくれないのかわかりません。
WebBrowserControlのAPIとかどこかにないでしょうか教えてください。
後、HttpのdoPost、doGetの違いをわかりやすく詳しく説明しているサイト等を
教えていただけないでしょうか?
- 39 :
- ここに来るぐらいなら言語の1つぐらい持ってるだろ?
ヘルプみろよ。
- 40 :
- BHOをいじってます。ブラウザのイベントはInvokeで拾えるんですが
DISPID_AMBIENT_DLCONTROLの拾い方がわかりません。
IWebBrowser2からIOleClientSiteを得ればよいのかな?
- 41 :
- 連投すまん。
IEでWordやExcelが開けるんだから、IEもIOleClientSiteを持ってるはずなんだが、
IWebBrowser2からどうやって取得したらよいのかわからない。
IWebBrowser2でQueryInterfaceかましてもNULLだった。
- 42 :
- VistaのIE7で仕様かわったっぽい?
Navigate2まわりでアクセス違反で落ちるようになった
- 43 :
- IOleClientSiteはクライアント側(Word, Excel)が持ってるものじゃないの
- 44 :
- IHTMLDocument2で、任意のタグを取得したい場合(例えばmetaタグとか)、
get_allでIHTMLElementCollectionを取得して、一個一個ループでまわしてタグ名を見ていくしかないのでしょうか?
IHTMLDocument3にgetElementsByTagNameというものがあったのですが、できればIHTMLDocument3は使いたくないです。
- 45 :
- >>43
ActiveDocumentを貼り付けられるものは
IOleClientSiteを持ってると思うんだけど。
Word、Excelも当然もってるし、IEも持ってるはず。
全部ActiveDocumentを開けるから。
- 46 :
- >>44です。get_allしてループでまわすのが面倒だったので質問したのですが、
IHTMLElementCollectionに、itemというメソッドがあって、
タグ名をもとにタグ情報を取得できそうなので解決しそうです。
失礼しました。
- 47 :
- いつの間にか復活してるじゃないかsage
- 48 :
- ブラウザイベントをInvokeで拾う方法を教えれ下さい。
- 49 :
- window.external
- 50 :
- >>48
DWebBrowserEvents2で色々やってみれ
- 51 :
- >>49-50
実はHtmlイベントの受信がしたかったわけですが、なんとか接続の確立ができ申した、言葉足らずで失礼。
一ヶ月かかったわ…
- 52 :
- 接頭語のIってなんなの?Iって。
IEとかIE_とかにしてくれよ。
- 53 :
- >>52
InterfaceのIだろ。
MFCなんかでクラス名がCナントカになっているのと同じ。
- 54 :
- すみません
タブブラウザでソースコードを公開している奴って
ありますか?
- 55 :
- Donut RAPTなどなど
- 56 :
- Donut RAPTはHTMLが変に表示される
白抜き文字とかも真っ黒
- 57 :
- >>51
IWebBrowserNからDWebBrowserEvents2とか使わず、
IDispatch::Invokeでイベント取得できたってことですか?
おしえてホスィ。
DocumentCompleteが通知されてほしい。
- 58 :
- そういえば、IEコンポーネントのJavaScriptからC++の変数を参照する方法ですが、
IHTMLDocumentのget_Scriptで得たIDispatchからQueryInterfaceで、
IDispatchExを取得してInvokeEx呼び出せばいいみたいです。説明わかりにく。
IEコンポーネントからIActiveScriptを得るのはたぶん無理っぽいです。
IDispatchExからプロパティを追加する方法しかないっぽいです。
参考資料 → http://www.codeproject.com/com/dispexsinkconnector.asp
これ調べるの結構かかったなぁ
- 59 :
- IXxxxxx → Interface
CXxxxx → Concrete?またはClass?
DXxxxx → Dってなによ
- 60 :
- >>59
dispinterface
- 61 :
- >>59
さすがにコンクリートはないと思うが
- 62 :
- CreateWindowExで作ったIEコンポのウィンドウを破棄するときはDestroyWindowでOK?
- 63 :
- DIXxxxx → Dual Interfacesらしい
AfxXxxx → MFCのもの
CXxxxxはclassのCっぽいね。
- 64 :
- >>62
CreateWindowExってことはATLのIEコンポ?
よく調べてないけどDestroyWindowでおk(適当
- 65 :
- はげ
- 66 :
- >>57
Htmlイベントじゃなくて、マウスイベントとかだったわ…重ね重ね失礼。
- 67 :
- >>66
いや、俺がよく見てなかったのが悪かったわ。
>実はHtmlイベントの受信がしたかったわけですが、
と書いてあるのを思いっきり見落としてた。
- 68 :
- HTAアプリケーションのselection=noみたいに、
IEコンポーネント内のテキストをマウスカーソルで
選択できなくするような方法をご存知ないでしょうか?
- 69 :
- そういうJavaスクリプトを読ませる。
http://www.iwate-np.co.jp/news/y2006/m07/d02/NippoNews_11.html
- 70 :
- >>69
オオオおおお。まさにやりたいことです。ありがとうございます。
document.onmousedown = new Function("return false");
↑これやったらボタンも押せなくなるのかと思ってましたけどできるんですね
- 71 :
- window.moveToやwindow.resizeToが呼び出されたことを知る方法ないでしょうか?
DWebBrowserEvents2とか見ましたが見当たりませんでした…。
- 72 :
- マウスポインタの下にリンクがあった場合、
そのリンクのIHTMLAnchorElementを取得するにはどうすればいいすか?
- 73 :
- 禿
- 74 :
- すみません
IEコンポーネントでIHTMLDOMNodeを使おうとしたのですが
error C2065: 'IHTMLDOMNode' : undeclared identifier
と定義不明といわれて怒られます。
MSDNを見る限り、Mshtml.hをインクルードし
IE5以上なら使えると書いてあります。
なぜ私の所ではダメなのでしょうか?
Windows2000SP6+VisualStudio6.0+IE6です。
よろしくお願いいたします。
- 75 :
- VS6.0だと古くてヘッダに定義がないのかも。
実際に俺の環境ではVS.NET2003とVS6.0を入れてるけど、6.0にはIHTMLDOMNodeのクラス定義がないね。
VS6.0の最新のサービスパック入れたらなおるか、.NET買うかしないと。
- 76 :
- すみません。妥当なスレが分らなかったのでここで質問させてください。
IE7の日本語ベータ3をインストールしたら、InternetOpenUrlにシフトJIS
のファイル名を使っているプログラムがエラーを起こすようになりました。
β版だからといえばそれまでですが、何か情報を持ちの方、または
対処方法、ご存知であればお教えください。
補足として、
・IE6以前とIE7ベータの英語版では問題なかった。
・IE7日本語β3からアドレスバーにS-JIS日本語名を含むURLを直接入れた場合は読み出せる。
・InternetOpenUrlでエラーが起きたとき、サーバーのログを見ると、日本語に該当する部分が
著しく欠損した状態(文字化けとか言うレベルじゃなく)でアクセスされている模様…。
よろしくお願い致します。(日本語のUrlを使うなというのは横へ置いておいて…)
- 77 :
- 正式版になってから言え
- 78 :
- >>76
InternetOpenUrlWだとどうなる?
- 79 :
- >>78
プログラムがANSIなのでW版はちょっと試していませんが、
ひとまず自分でURLの漢字部分をutf8エンコードして回避しました。
どうもありがとうございました。
- 80 :
- >75
.NETではIHTMLDOMNodeは使えるみたいですね。
あとVS6.0のSP6をインストールしてみましたが使えませんでした。
やはり.NETを買うしかないみたいですね。
ありがとうございました
- 81 :
- >>78
W版を試してみたところ、InternetOpenUrlWだと何も考えなく
てもうまく行きました。
自分で%E7……て変換しなくてもやってくれるようです。
重ねてありがとうございました。
……自分で変換したさっきの苦労はorz
- 82 :
- 別ドメインのフレームのIHTMLDocument2を取得するにはどうすればよいでしょうか
- 83 :
- 質問です。
XMLデータをメモリから設定すると、HTMLとして表示されてしまうのですが、
設定するデータの属性を設定する方法があるのでしょうか?
現在は、一度「.xml」な一時ファイルを吐き出してそれを読み込ませる方法にしています。
- 84 :
- ちゅんと doctype 付けてる?
- 85 :
- >>84
つけていませんでした。DOCTYPE見ているのですか。
試してみます。どうもです。
- 86 :
- 前スレででていたUrlMkSetSessionOptionを使って
ユーザエージェントを変更したいのですが、変更されません。
設定するタイミングがあるのかと、いろんな箇所で入れて、
UrlMkGetSessionOptionで取得すると取得される値では変更はされているようでしたが
printenv.cgiなどでみると変更されていません。
分かる方いますでしょうか?
- 87 :
- navigator.userAgentが変更されていました。
UrlMkSetSessionOptionは、Javascriptのnavigator.userAgentを変更する関数で、
HTTPプロトコル上のUser-Agentヘッダーオプションは変更しない・・?
- 88 :
- 確認君とかで見ると普通に変更されるよ。
- 89 :
- >>88
確認君でも見ましたが、変更されていませんでしたが・・・。IE7 XPPro SP2です。
お詳しいようなので、いまさらな質問ですが、
UrlMkSessionOptionは、プログラム内で一度実行したらそれでいいのでしょうか?
実行するタイミング(たとえば、コンポーネントを起動後など)などありますか?
- 90 :
- IEコンポーネントを作った後にUrlMkSessionOptionしてるだけだよ。IE6+XPPro
ただ、こっちはなぜか実行時1回こっきりしか変えられないんだよなぁ・・・。
- 91 :
- 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 :
- その nextProcess() をしない場合どうなるの?
- 93 :
- IEコンポーネントでとあるHPを表示させているのですが、
そのHPの中でFocus()をしていて、そのHPをプログラム側で読み込むと
表示しているアプリを前面に持っていってしまいます。
(何回もそのHPを更新をするのでその都度前面に来るとかなり鬱陶しいです。)
何とかこれを回避したいのですが何か良い方法はありませんでしょうか?
Win2000+VC6.0+IE6です。よろしくお願いいたします。
- 94 :
- >72
IHTMLDocument2::elementFromPoint
- 95 :
- IWebBrowser.Navigate2(..)の第一引数にマイコンピュータとかのCLSID
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
を文字列で渡す場合、
IE6(XP sp2) だと正常に動作するのに、IE7(Vista β2)だと
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました……」
ってエラーがでるんですが
なんとかなりませんかね?
- 96 :
- 質問です。
.zipファイル等のリンクをクリックしてダウンロードする際の保存先のパスや、
ファイル名指定ダイアログでキャンセルした等の情報は取れないんでしょうか?
- 97 :
- JavaScriptを実行する方法はありませんか?
DocumentComplete時に初期設定JavaScriptを実行するようにしたいのです。
>>93
荒業で以下のJavaScriptを実行する手もある。
window.focus = function(){ return false; }
- 98 :
- 質問なのにsageちゃった。せっかくだからage
- 99 :
- HtmlElementCollection links = webBrowser1.Document.Links;
foreach (HtmlElement link in links)
とかやってるのですが、linkのなかに含まれる
URLだけを拾うにはどうしたらいいでしょうか?
環境は.net2です。
- 100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
誰かがものすごいソフトの名前を勢いで考えるスレ
フリーソフトなどに使われる言語は?
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
学んで損したプログラミング言語