1 :
デフォルトの名無しさん :
2006/04/16(日) 21:08:42 =====================================
IEコンポーネントを利用したブラウザのプログラミングに関する情報の交換及び再
利用を目的とした総合情報スレッドです。
=====================================
最近IEコンポーネントを利用してブラウザを作るプログラマが増えてきました。こ
れから自作してみようという人も多いでしょう。コンポーネントを貼り付けるだけ
なら誰でも出来ますが複雑な制御を行うにはそれなりの経験や知識が要るようです。
私自身が知りたいのも山々ですが、似たような質問が分散するのを避けるためにも
統一しましょう。ブラウザ作者、COM に精通した方大歓迎です。もちろん公開した
くない "禁断のテク" もあると思いますが、そこは各人の判断ということでお願い
します。
※ 開発言語は問わないことにしますので質問するときはその辺を踏まえてお願いし
ます。
(以上、前スレより)
IEコンポーネントを使い倒すスレ
http://pc5.2ch.net/test/read.cgi/tech/982930049/ かなり前のスレですが続編を立てました。
2 :
デフォルトの名無しさん :2006/04/16(日) 21:12:04
>>3 FW2.0にはwebbrowserコントロールあるし、IEコンポーネントプログラミングなんてもう必要無いんじゃまいか?
5 :
デフォルトの名無しさん :2006/04/20(木) 15:52:56
たしか、Part 2があったはずなんだけど いやーごめんなさいでブッとばされて、それっきりになったんだっけ?
まさか今になって次スレが立つとは。うれしいなあ。
>>1 の英断に乾杯。
このままDAT落ちしそう
4ヶ月ほっとかれても落ちないみたいだから
だいじょぶなんでない?
テンプレ?に追加
わからないことがあったらとりあえずググっとけ
http://google.co.jp/ 調べてるうちに英語のページが出てきても、
そこに書いてあるメソッドやらIDやらでググればいい
10 :
デフォルトの名無しさん :2006/05/07(日) 22:04:26
ageてもいいよね
11 :
デフォルトの名無しさん :2006/05/11(木) 00:49:29
IE7β2インスコした記念age
12 :
デフォルトの名無しさん :2006/05/13(土) 12:13:27
記念質問 プロセス内の変数(WinMainとかで宣言した変数)を、 IEコンポーネントの中のJavaScriptから参照することはできますでしょうか? int main(void){ int count = 0; // ←例えばこういう変数をJavaScriptで直接参照したい } データの算出はC++で書いて、 そのデータの表示はHTML+JavaScriptでやりたい感じなのですが・・・。
14 :
デフォルトの名無しさん :2006/05/13(土) 18:15:06
HTMLでデータを表示するなら自前でHTMLファイルを書き出して表示とか。
15 :
デフォルトの名無しさん :2006/05/13(土) 18:37:42
16 :
デフォルトの名無しさん :2006/05/13(土) 20:27:32
COMっていうことになるのかなぁ。
正にIEコンポーネントを使い倒せばできるはず。 (倒さなくてもできるとは思うけど)
18 :
デフォルトの名無しさん :2006/05/13(土) 21:13:36
19 :
デフォルトの名無しさん :2006/05/13(土) 22:02:41
ちがう
21 :
デフォルトの名無しさん :2006/05/13(土) 22:45:51
確か、MSDN にそのものずばりの HOWTO があったような記憶が・・・ 今手元に MSDN が無いのでなんとも言えないけど。 WEB 版は、変わっちゃったんだね。
22 :
19 :2006/05/14(日) 01:22:17
>>12 >プロセス内の変数(WinMainとかで宣言した変数)を、
>IEコンポーネントの中のJavaScriptから参照することはできますでしょうか?
横レスですが
IHTMLDocument::get_Script()とかいう話ではない?
ただ「JavaScriptから変数を参照する」というより
アプリ側から引数として渡すような形になるけど
頓珍漢なこといってたらごめん。
24 :
22 :2006/05/14(日) 08:58:57
22のリンク先はIHTMLDocument::get_Script()で行けるのかも…。 ScriptEngineが取得できれば、IActiveScript->AddNamedItemあたりで アプリ側から名前付きオブジェクトを渡せるから行けるんではと思うけど、 にしても、17,18,20の回答(正解)が気になる…。
Win32API質問箱で質問した者ですが、誘導されたので改めて質問させて頂きます。 WinXP SP2のIEで、ダウンロードが自動的に始まるページへ移動すると "セキュリティ保護のため・・・" と表示され、自動的にダウンロードが行われないようになっていますが、 IWebBrowserを使用したIEコンポーネントで同じような機能を実装するには どうすれば良いのでしょうか? よろしくお願いします。
26 :
デフォルトの名無しさん :2006/05/15(月) 19:41:35
たぶんリダイレクトするときにイベントが来るからDWebBrowserEvents2を実装してみる。 あくまでもたぶん。
27 :
12 :2006/05/15(月) 19:44:44
>>16-24 お返事遅れてすいません。
IActiveScript->AddNamedItemで、スクリプトにCでのコード埋め込みができそうですね。
調べる限り、それをやるにはコードが相当複雑そうですが(^^;
ありがとうございました。
>>25 あっ、
>>836 だ。
なんかIE7βにしてからIEコンポーネント使ったソフトの挙動がヘンなんだが。
さすがはM$
仕様が変わってるのだから仕様が無い。
だれが上手いこと言えとw
>>28 IE7b2はデフォルトでローカル(メモリやファイルシステムにある)なhtmlで
アクティブスクリプトを有効にしないようになってるからじゃ○マイカ。
>>32 そうだったノカー(AA略)
サンクスコ!
35 :
デフォルトの名無しさん :2006/06/01(木) 19:54:50
age
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の違いをわかりやすく詳しく説明しているサイト等を 教えていただけないでしょうか?
ここに来るぐらいなら言語の1つぐらい持ってるだろ? ヘルプみろよ。
BHOをいじってます。ブラウザのイベントはInvokeで拾えるんですが DISPID_AMBIENT_DLCONTROLの拾い方がわかりません。 IWebBrowser2からIOleClientSiteを得ればよいのかな?
41 :
40 :2006/06/17(土) 01:33:43
連投すまん。 IEでWordやExcelが開けるんだから、IEもIOleClientSiteを持ってるはずなんだが、 IWebBrowser2からどうやって取得したらよいのかわからない。 IWebBrowser2でQueryInterfaceかましてもNULLだった。
VistaのIE7で仕様かわったっぽい? Navigate2まわりでアクセス違反で落ちるようになった
IOleClientSiteはクライアント側(Word, Excel)が持ってるものじゃないの
IHTMLDocument2で、任意のタグを取得したい場合(例えばmetaタグとか)、 get_allでIHTMLElementCollectionを取得して、一個一個ループでまわしてタグ名を見ていくしかないのでしょうか? IHTMLDocument3にgetElementsByTagNameというものがあったのですが、できればIHTMLDocument3は使いたくないです。
45 :
40 :2006/06/17(土) 12:45:43
>>43 ActiveDocumentを貼り付けられるものは
IOleClientSiteを持ってると思うんだけど。
Word、Excelも当然もってるし、IEも持ってるはず。
全部ActiveDocumentを開けるから。
46 :
44 :2006/06/17(土) 23:31:17
>>44 です。get_allしてループでまわすのが面倒だったので質問したのですが、
IHTMLElementCollectionに、itemというメソッドがあって、
タグ名をもとにタグ情報を取得できそうなので解決しそうです。
失礼しました。
いつの間にか復活してるじゃないかsage
ブラウザイベントをInvokeで拾う方法を教えれ下さい。
window.external
50 :
デフォルトの名無しさん :2006/06/24(土) 22:42:56
>>48 DWebBrowserEvents2で色々やってみれ
51 :
48 :2006/06/24(土) 22:55:43
>>49-50 実はHtmlイベントの受信がしたかったわけですが、なんとか接続の確立ができ申した、言葉足らずで失礼。
一ヶ月かかったわ…
52 :
デフォルトの名無しさん :2006/06/26(月) 13:55:19
接頭語のIってなんなの?Iって。 IEとかIE_とかにしてくれよ。
>>52 InterfaceのIだろ。
MFCなんかでクラス名がCナントカになっているのと同じ。
54 :
デフォルトの名無しさん :2006/06/26(月) 18:23:46
すみません タブブラウザでソースコードを公開している奴って ありますか?
Donut RAPTなどなど
Donut RAPTはHTMLが変に表示される 白抜き文字とかも真っ黒
>>51 IWebBrowserNからDWebBrowserEvents2とか使わず、
IDispatch::Invokeでイベント取得できたってことですか?
おしえてホスィ。
DocumentCompleteが通知されてほしい。
58 :
12 :2006/06/26(月) 23:18:21
そういえば、IEコンポーネントのJavaScriptからC++の変数を参照する方法ですが、
IHTMLDocumentのget_Scriptで得たIDispatchからQueryInterfaceで、
IDispatchExを取得してInvokeEx呼び出せばいいみたいです。説明わかりにく。
IEコンポーネントからIActiveScriptを得るのはたぶん無理っぽいです。
IDispatchExからプロパティを追加する方法しかないっぽいです。
参考資料 →
http://www.codeproject.com/com/dispexsinkconnector.asp これ調べるの結構かかったなぁ
IXxxxxx → Interface CXxxxx → Concrete?またはClass? DXxxxx → Dってなによ
CreateWindowExで作ったIEコンポのウィンドウを破棄するときはDestroyWindowでOK?
63 :
59 :2006/06/27(火) 22:31:58
DIXxxxx → Dual Interfacesらしい AfxXxxx → MFCのもの CXxxxxはclassのCっぽいね。
>>62 CreateWindowExってことはATLのIEコンポ?
よく調べてないけどDestroyWindowでおk(適当
65 :
デフォルトの名無しさん :2006/06/29(木) 16:44:23
はげ
66 :
51 :2006/06/30(金) 05:45:25
>>57 Htmlイベントじゃなくて、マウスイベントとかだったわ…重ね重ね失礼。
67 :
57 :2006/06/30(金) 13:15:49
>>66 いや、俺がよく見てなかったのが悪かったわ。
>実はHtmlイベントの受信がしたかったわけですが、
と書いてあるのを思いっきり見落としてた。
HTAアプリケーションのselection=noみたいに、 IEコンポーネント内のテキストをマウスカーソルで 選択できなくするような方法をご存知ないでしょうか?
>>69 オオオおおお。まさにやりたいことです。ありがとうございます。
document.onmousedown = new Function("return false");
↑これやったらボタンも押せなくなるのかと思ってましたけどできるんですね
window.moveToやwindow.resizeToが呼び出されたことを知る方法ないでしょうか? DWebBrowserEvents2とか見ましたが見当たりませんでした…。
マウスポインタの下にリンクがあった場合、 そのリンクの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です。 よろしくお願いいたします。
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を使うなというのは横へ置いておいて…)
正式版になってから言え
>>76 InternetOpenUrlWだとどうなる?
79 :
76 :2006/07/14(金) 22:19:03
>>78 プログラムがANSIなのでW版はちょっと試していませんが、
ひとまず自分でURLの漢字部分をutf8エンコードして回避しました。
どうもありがとうございました。
80 :
74 :2006/07/14(金) 22:33:46
>75 .NETではIHTMLDOMNodeは使えるみたいですね。 あとVS6.0のSP6をインストールしてみましたが使えませんでした。 やはり.NETを買うしかないみたいですね。 ありがとうございました
81 :
76 :2006/07/14(金) 22:33:46
>>78 W版を試してみたところ、InternetOpenUrlWだと何も考えなく
てもうまく行きました。
自分で%E7……て変換しなくてもやってくれるようです。
重ねてありがとうございました。
……自分で変換したさっきの苦労はorz
別ドメインのフレームのIHTMLDocument2を取得するにはどうすればよいでしょうか
83 :
デフォルトの名無しさん :2006/07/15(土) 21:25:02
質問です。 XMLデータをメモリから設定すると、HTMLとして表示されてしまうのですが、 設定するデータの属性を設定する方法があるのでしょうか? 現在は、一度「.xml」な一時ファイルを吐き出してそれを読み込ませる方法にしています。
ちゅんと doctype 付けてる?
85 :
83 :2006/07/16(日) 05:13:09
>>84 つけていませんでした。DOCTYPE見ているのですか。
試してみます。どうもです。
86 :
デフォルトの名無しさん :2006/07/18(火) 03:06:57
前スレででていたUrlMkSetSessionOptionを使って ユーザエージェントを変更したいのですが、変更されません。 設定するタイミングがあるのかと、いろんな箇所で入れて、 UrlMkGetSessionOptionで取得すると取得される値では変更はされているようでしたが printenv.cgiなどでみると変更されていません。 分かる方いますでしょうか?
87 :
86 :2006/07/18(火) 03:12:59
navigator.userAgentが変更されていました。 UrlMkSetSessionOptionは、Javascriptのnavigator.userAgentを変更する関数で、 HTTPプロトコル上のUser-Agentヘッダーオプションは変更しない・・?
確認君とかで見ると普通に変更されるよ。
89 :
86 :2006/07/18(火) 05:21:24
>>88 確認君でも見ましたが、変更されていませんでしたが・・・。IE7 XPPro SP2です。
お詳しいようなので、いまさらな質問ですが、
UrlMkSessionOptionは、プログラム内で一度実行したらそれでいいのでしょうか?
実行するタイミング(たとえば、コンポーネントを起動後など)などありますか?
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(); とかしても、ステータス判定のところで無限ループが発生してしまい、お手上げです。 どなたか、ご教示ください・・・。
その 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
IWebBrowser.Navigate2(..)の第一引数にマイコンピュータとかのCLSID ::{20D04FE0-3AEA-1069-A2D8-08002B30309D} を文字列で渡す場合、 IE6(XP sp2) だと正常に動作するのに、IE7(Vista β2)だと 「保護されているメモリに読み取りまたは書き込み操作を行おうとしました……」 ってエラーがでるんですが なんとかなりませんかね?
96 :
デフォルトの名無しさん :2006/07/24(月) 00:17:00
質問です。 .zipファイル等のリンクをクリックしてダウンロードする際の保存先のパスや、 ファイル名指定ダイアログでキャンセルした等の情報は取れないんでしょうか?
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です。
IHTMLAnchorElement get_href
>>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
104 :
99 :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 :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 :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 :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 :2006/07/29(土) 00:38:29
>>1 >ちょっと思ったのですが、focusはDownload中にScriptとして読み込まれ、
>実行されるわけですよね?だからDownloadComplete時にfocusを無効にしても遅いような気がしてきました。
まぢですか。と思ってやってみたら本当ですね。
私は標準で用意されてるwindowクラスのmoveToやらmoveByなどのメソッド書き換えて、
別の動作にさせたいという要求があったのですが同じ理由で無理そう。
そうなるとちょっと良い方法はわかりません。困りましたw
今まで表示済みのページに対してJavascriptを適用するのに
わざわざDocumentのwriteで書き直しを行っていたのですが、
execScriptなんてのがあったのですね。
大変参考になりました、ありがとうございます。
>>103 ちなみに、BSTR型は、ただのワイド文字列とは違うので(先頭が文字列長になっています)
CComBSTR等で包んであげると良いです。
execScript(CComBSTR("window.focus = function(){ return false; }"),CComBSTR("JavaScript"),NULL);
114 :
デフォルトの名無しさん :2006/08/02(水) 01:30:29
自分がクリック(に相当する操作)した回数を数えるんだろ?
117 :
114 :2006/08/04(金) 00:53:49
> 116さん
詳しい説明ありがとうございました。
NavigateComplete2も試してみたんですが、クリックした際に呼ばれないようです。
まだ、理解できていないですが、以下の方法で少しチャレンジしてみようと思います。
相談にのっていただいてありがとうございました。
1)Ethrealでパケットキャプチャして調べたところ、通信をしているのでWebBrowserコントロールで
通信しているパケットを取得して判断。
2)下の方法でクリックのイベントが取れるそうなので、そこからがんばる。
http://support.microsoft.com/kb/246247/
指定したリンクが未読か既読か区別する方法ってありますか? IHTMLAnchorElementではそのようなメソッドがないようです。。。
>>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
無理
Visual C++ 2005 Express Edition は?
125 :
デフォルトの名無しさん :2006/08/11(金) 10:11:58
BCCでは無理なようですね ありがとうございました
ページを更新した(更新ボタンを押す or F5を押す) というイベントはどう拾えばよいのでしょう?
129 :
デフォルトの名無しさん :2006/08/21(月) 00:17:13
IEツールバーの製作もここですか? ツールバー上の特定のボタンを押すとポップアップメニューが出てくるように プログラムしたのですが、IEを複数起動した場合、2つ目以降では メニューが出てきません。他にも、IEを複数起動した場合、不安定に なることが多いです。これって何が原因でしょうか。 IEを複数起動すると、ツールバーも複数存在するわけですが OSの内部ではどうやって各ツールバーを扱っているのでしょうか。
>>128 更新ボタンって自分で作ってないの?
F5はキー拾えばいいんじゃね?
>>129 >IEを複数起動すると、ツールバーも複数存在するわけですが
>OSの内部ではどうやって各ツールバーを扱っているのでしょうか。
IEが別プロセスならツールバー間も無関係なはず
別プロセスでも共有しちゃってるような何かリソースがあるんじゃないの
設定ファイルとかレジストリの状態とか
131 :
128 :2006/08/21(月) 00:45:50
>>130 説明不足でした。
自分でIEコンポのインスタンス生成してるんじゃなくBHOをやってます。
なのでInternetExplorerで更新されたことが知りたいんです。
更新だとBeforeNavigateはこないです。
>>131 BHOってのがなんだか知らんが、
DownloadBeginかDownloadCompleteだったら、
location.reload()とかで更新されるたびに毎回通知がきたよ。
>>129 複数のスレッドから呼ばれてもきちんと動作するように作る。
ねーねー、おまいら IE6 と IE7 の違いはどう吸収すんの?
135 :
七資産 :2006/08/23(水) 02:50:30
気合
今のところ、Navigateに空文字渡すとエラーが出るようになったくらいしか IE7と6の違いには遭遇してないけど、他にもいろいろあるんだろうな。
多段タブにできないものかな。
戦後の復興も気合いだということを忘れなく。
>>139 気合はもちろん必要だが、気合だけでは無理、ということをお忘れなく。
141 :
139 :2006/08/23(水) 23:32:10
プログラムは気合いと才能。
142 :
七資産 :2006/08/24(木) 03:40:09
そして徹夜
閃き、発想・・・まぁ才能の一部だなぁ
144 :
139 :2006/08/24(木) 14:43:03
昼寝して目覚める数分前の夢の中に半分いる状態で、 悩んでいるロジックについて考えると答えが出たりする。 この閃きは、神から授かった才能。
はいよかったね。 でもここはここはIEコンポーネントを使い倒すスレだよ。
IDispatchは大体理解したのですが、IDispatchExっていうのはなんなんですか?なんなの?なんなのよー!?
マイクロコロヌ
>>144 それは、うまく右脳を使える時間帯だな。ハイヤーセルフ(高次元の自分)と呼ばれる奴だ。
今、悩んでいる出来事を書いたメモを枕元において寝るとハイヤーセルフが寝ている間に解決してくれるという。
経営者とかが良くやる手法だとか。人間誰しも持ってる能力だ。
独学で使いこなしているのであれば、なかなか評価できるが。
IEコンポを生成したスレッドとは別のスレッドから、 IHTMLDocument2::write呼び出したら、まずいかな? Mutexはったら大丈夫かな?
149 :
147 :2006/08/28(月) 11:53:33
つーか実際に呼んだら死んだよ・・・ む~今までおぼろげな理解で済ませてきたが、 Apartmentとかも勉強せねばならんな。 確かに、そっちのスレッドのがよさげ。
150 :
デフォルトの名無しさん :2006/09/09(土) 18:32:57
上の方で誰か質問してたけど 結局Reloadを検知するのってどうやんの? 生IEなんだけど。 BeforeNavigate2 はFireされないし wm_commandだとメニューやF5は取れるけど、 更新ボタン押されても分からないよママン
安全な方法では無理
152 :
デフォルトの名無しさん :2006/09/10(日) 11:52:41
既成のタブブラウザがあるのですが、 これのaxwebbrowserのプロパティを外からいじる方法ってあるんでしょうか?
誰か答えてやれよ
漏れの男汁を飲み干したら答えてやろう。
>>152 タブブラウザの実装による。
COMのインタフェースとして取得できるなら望みはあるけど。
普通はそこまでしてないだろうな。
タブブラウザ側でAPIぐらい用意してるだろ普通。
janeのソース見る限り、外から使える仕組みになってるようには見えないぞw
どこのJaneがタブブラウザかと
すまん。間違えた。ぷにるはSDK公開されたら取得できるかもね
160 :
128 :2006/09/21(木) 00:37:35
>>150 なんか別件で調べてたら偶然みつけた
VK_BROWSER_REFRESH
とかいうvirtual keyがあるらしい。XP/2000のみ有効らしいが。
161 :
152 :2006/09/23(土) 23:02:35
レスありがとうございます。 とてもマイナーな洋物タブブラウザなので無理そうですね… スクリプトエラーの警告がうざすぎるので消したかったのですが諦めます。
IEコンポから呼ばれるイベントは、プログラムのメインスレッドとは違い IEコンポが自分で作ったスレッド上で実行されるんですよね? なのでそのイベント上ではメインスレッドと処理がぶつからないようにすべきなんでしょうか?
IEの設定でJavaScriptをOFFにしても、自作プログラムに貼り付けたら普通にJavaScriptが実行された……
>>163 自作プログラムの中は舞いコンピュータゾーン扱いされるのでは?
俺の想像だが。
なんかのインターフェースで制限つきサイト扱いにできるよ。 OEが使ってるのもそれ
IE7ベータのときに日本語を含んだURLのInternetOpenUrlが A版 NG W版 OK だったのが、 A版 OK W版 NG に変わってる(IE6ではどっちもOKだった) MSがもはや何をしたいのか分らん。A版戻したってことは 日本語URL何が何でも排除って方針でもないようだが…。 もう自分で変換することにしたよ(´・ω・`)
A版 OK W版 NG ってのは正式版ではってこと
>>116 LPWSTR で非 ASCII 文字を含む URL を渡したとき、どういう動作をしてほしいの?
UTF-8でエンコードしてURLEscape?
漏れには何を持って「OK」「NG」とするのかもわからない。
>>168 166だけど俺に対して書いたんだよね。
>漏れには何を持って「OK」「NG」とするのかもわからない。
内部動作的な詳細は知らないが、IE6状態で動いてたものが
IE7を入れると動作が変わるのがNG。
>UTF-8でエンコードして
たぶんこれでOKなんだろうが、上に書いたとおりInternetOpenUrl
の内部動作の実際は知らないので、「互換性を保ってくれ」というの
が要望。
非 ASCII 文字を含む URLを使うなという話もあるかもしれないが、
プログラムのユーザーが何を入れるかは分らないからどうしようも
ない。
> に変わってる(IE6ではどっちもOKだった) IE6の動作が基準だったらこれはトートロジーで書く意味ないじゃん。 IE6がバグっててIE7でバグが修正されただけかもしれないのに。 どうせバグでもいいから動作変えるなと言うんだろうけど まあIEコンポはSide-by-Sideでないから一理はあるな
>IE7でバグが修正されただけかも A版とW版って文字コード以外動作同じだと思ってたんだけど そうじゃない場合もあるのか? 文字コードの変換(A←→W)はAPI使ってる。 IE7で『バグが修正されて』どっちも駄目になるなら まだ整合性も有るように感じるけどね。 >> に変わってる(IE6ではどっちもOKだった) >IE6の動作が基準だったらこれはトートロジーで書く意味ないじゃん。 そう? 166を書いた段階での参考情報として付加したまで。
案外、インターネットオプションの「常にURLをUTF-8で送信する」がオフになっているだけというオチはない?
>>172 >URLをUTF-8で送信
言われて、それらしきオプション、ONOFFどちらも試してみた。
けど変わらなかった。そういう問題でも無いみたい。
A版ならチェックがOFFでも日本語URL開ける。
VB2005ではMSChartってインストールされないんでしょうか? もしそうなら、代わりの機能とかどうにかしてMSChartを使うこととかできませんか?
175 :
174 :2006/12/05(火) 19:15:17
VB.NETスレと間違えました。 向こうで質問しなおしてきます。 失礼しました。
表示したページのWidthやHeightを調べて、スクロールバーが出ないように Windowのサイズを変更したいのですが、WidthやHeightがわかりません。 どのように調べればよいですか?
177 :
デフォルトの名無しさん :2006/12/10(日) 00:28:13
IHTMLDocument2か何かで取れないっけか
取れないよ。自動でレンダリングするからWidth,Heighなんて取っても意味ないんじゃないのかね?
調べたらIWebBrowser2で取ることは出来るっぽいが、
>>178 の通りかも知れぬ
181 :
デフォルトの名無しさん :2006/12/21(木) 01:20:17
シェルをC#でいじくってるんですが、 BeforeNavigate2の段階で、 移動しようとしてるフォルダのpIDL取得する方法はないですか? URLじゃなくて。 NavigateCompleteすればShellGetPathで取れるんですが
182 :
124 :2006/12/26(火) 01:21:39
お。こんなスレ出来てたのか・・・ では早速。 Internet Explorer_Hiddenウィンドウの役割と IEのウィンドウで使われる独自メッセージについて調べているのですが、 うまく探せません。 いい情報を見かけた方、お教え下さい。
183 :
182 :2006/12/26(火) 02:33:11
↑ 124は間違い
184 :
デフォルトの名無しさん :2007/01/08(月) 19:04:39
BeforeNavigate2でPOSTDATA横取りしたいんだけど、ファイルアップロードのタグが あるときにデータが途中で切れちゃうよママン。 まーPostData中に(っていうかアップロードしたファイル中に)NULLが入ってるんだろうけど 正確なPostDataのlengthって取れないのかな?
185 :
デフォルトの名無しさん :2007/01/08(月) 19:47:02
IE7だと解決してるのかねぇ
187 :
デフォルトの名無しさん :2007/01/10(水) 20:07:45
今のさっきまでこのスレ過去スレと思ってた現役だったんですね よろしくオナガイシマス static CComQIPtr< IWebBrowser2 > pWB2; こんな書き方良く見かけるのですがこれはpWB2にIWebBrowser2のポインタを 設定すると考えてよろしか? COMコンポ全然わかんないんでスマソ
スマソあげてもうた
Template
ATL
187です VS2005なのですが、コンパイラの設定でATLを使用するに設定しないとだめ? それでpWB2の値の意味は何なの?けっきょく
>>191 CComQIPtr< IWebBrowser2 > 型の変数を宣言しただけで、値は設定していない。
C++の基本とVC のCOM向け拡張の両方とが解っていないと、
C++でCOMやるのは難しいと思う。
>>192 サンクス
COMとかなるべく関わりたくなかったんだけど、やらなきゃいけない羽目になって
苦しんでいます、pWB2の型は何型になるのでしょうか?
スマートポインタの概念を理解すべし。auto_ptrでぐぐると良い。 CComPtrも基本はauto_ptrと同じだ。要するに解放忘れを防ぐための仕組み。
>>193 pWB2の型はCComQIPtr< IWebBrowser2 >型と何度も(r
196 :
デフォルトの名無しさん :2007/01/12(金) 01:25:36
IEコンポーネントを使っても、 開いてるページに埋まってるFrameの中を見ることは出来ないんですか?
セキュリティに関わるからね
198 :
デフォルトの名無しさん :2007/01/12(金) 02:02:29
やっぱりそうですか。 ありがとうございました。
199 :
デフォルトの名無しさん :2007/01/12(金) 11:54:54
C#でWebBrowserControl経由で使ってると、 IEというかInternet Optionでの設定は反映されるんですが、 独自のProxy指定は出来ないのですか?
200 :
デフォルトの名無しさん :2007/01/16(火) 13:47:20
C#でSHDocVw.dll参照に追加してWebBrowserClass使うとき、 32bit環境だとHWNDプロパティがInt32で返ってくるんだけど、 これって64bitだとどうなってるの? IntPtrで返ってくる? それともInt64?
201 :
デフォルトの名無しさん :2007/01/21(日) 09:06:26
学校によるんじゃない?
卒論wardファイルw
スクリーンショットがDonut RAPTっぽく見えるんだが
読んでしまった しかしながら現状としては①②③個々のプログラムの方向性は出来上がってきたものの、 個々を関連付けるプログラムの作成には至っておらず、前述されている「タブブラウザ」への 組み込み、動作テスト等もまだ出来ていない状態である。最終的には独立したプログラムと して完成させ、デスクトップ上で起動できる状態を目指していく状態にある。 何もしてねーwwwwww
PCに縁遠い年寄り教授をだまくらかすにはこれで十分なんだろ
207 :
デフォルトの名無しさん :2007/01/22(月) 00:27:18
とってもw ard! 既に社会人で業務としての資料作りも慣れてる俺が言うのもなんだが、 内緒だけどあの程度プレゼン資料なら、前日の夕方から慌てて徹夜でデッチあげたりしてる。
209 :
デフォルトの名無しさん :2007/01/22(月) 00:41:28
そんな卒論って・・・・・ まぁありかなw
210 :
デフォルトの名無しさん :2007/01/22(月) 00:50:16
大学がアレなの? それとも学部がヲイなのか? 当然ゼミはヌルポなんだけど、学生はもっとガッされるべき。
211 :
デフォルトの名無しさん :2007/01/22(月) 01:39:03
阪南大学だってさ。 どこか分からん。国立じゃなさそうだ
212 :
デフォルトの名無しさん :2007/01/22(月) 01:41:46
4年も大学で学んであの程度ですか、そうですか。
今日からここは自分の卒論を晒すスレになりました 最初のかたどうぞ ↓
freenetみたいだけど2chネラー向きのファイル共有ソフトの提案
タイーホw
IEコンポーネントの使い方をやさしく指導してくれるサイトや本ってあります?
217 :
デフォルトの名無しさん :2007/01/22(月) 08:23:35
以下のテンプレに従って質問してください。 【性別】 男/女 【年齢】 実年齢 【居住地】 現在住んでいる所を行政区程度まで 【職業】 ありのままに 【身長】 cm表記で 【体重】 kg表記で正直に 【スリーサイズ】 バスト・ウエスト・ヒップをcm表記で。 【画像URL】 全身ならびに顔写真を100万画素クラスで。 【メールアドレス】 携帯電話もしくは、プロバイダ等のアドレスを。
相当偏差値低いらしい阪南大学。 学生の質が垣間見えた。
219 :
デフォルトの名無しさん :2007/01/25(木) 02:20:31
はいはい、次の卒論どうぞ。
IHTMLWindow2::execScript で外部からjavascriptを実行できることは わかったのですが、オブジェクト型を引数にとるjavascript関数に 引数を渡して実行することは不可能なのでしょうか (例えばVCから IUnknown* の情報を渡したいとか)。
221 :
デフォルトの名無しさん :2007/01/26(金) 20:40:08
>>199 私も
>>221 のリンク先とと同じくUrlMkSetSessionOptionに
INTERNET_OPTION_PROXYを渡して実現してた。
問題なく動作するはず。
223 :
デフォルトの名無しさん :2007/01/27(土) 20:53:20
System.Windows.Forms.Webbrowser を使ってる者ですが、 これを使って表示している場所から、別のリンク先をクリックした際に、 何を送信しているか補足する場所ってありますでしょうか? Navigatingメソッドでは何もつかめなさそうですし。 画面上のHTMLソースだけではなく、HTMLヘッダーだけではなく、ファイルに書き出していない メモリ上のクッキーの値もみたいのですが 知ってる方、よろしくお願いします。 環境 XP64 VS2005 C#
224 :
デフォルトの名無しさん :2007/02/02(金) 22:55:44
すみません javaScriptでIEコンポ内の ページを閉じるのを感知したいのですが なにか方法あります?
フォースを使え
226 :
デフォルトの名無しさん :2007/02/08(木) 19:13:13
htmlをブラウザに表示する前段階でhtmlを改変したいんです。 イメージとしてはプロキシサーバとかポップアップブロックみたいな感じ。 つまり間に一つ噛ましたいわけです。 どうしたらいいか教えてください。環境VC++
227 :
デフォルトの名無しさん :2007/02/08(木) 19:30:14
228 :
デフォルトの名無しさん :2007/02/08(木) 20:01:07
229 :
デフォルトの名無しさん :2007/02/08(木) 21:38:06
自プロセス・別スレッドでProxyって感じの実装を今試してるよ。 C#だけど。
230 :
デフォルトの名無しさん :2007/02/08(木) 23:02:14
WebBrowserClassとかHTMLDocumentClassとかで IEの表示文字サイズがなんになってるかとか 調べられないかな・・ どうやったら 調べられるか誰か教えてくれ・・・・
>>230 いわゆる最大~最小の文字サイズ?
それは初歩だと思うけど、「ExecWB OLECMDID_ZOOM」辺りでググれ。
232 :
デフォルトの名無しさん :2007/02/09(金) 01:14:24
人の卒論って面白いね^^
233 :
デフォルトの名無しさん :2007/02/16(金) 14:31:51
>>232 面白いってか、あれって卒論ってレベルじゃねーぞ。
なんか講義一回分の資料って感じじゃね?
街のパソコン教室って感じで、大学でやられても困るけど。
IOleCommandTarget::ExecでOLECMDID_SHOWSCRIPTERRORを握りつぶす Sleipnirの実装は知らんが、DonutRAPTのソースを落としてきて AtlhostEx.h,ScriptErrorCommandTargetImpl.h,DialogKiller.h辺りを眺めてみればいいと思う。 対象言語がC++以外の場合は知らん。
236 :
234 :2007/02/21(水) 21:27:42
237 :
デフォルトの名無しさん :2007/03/15(木) 18:12:34
IEオブジェクトを使用しあるページを表示し、 ボタンを押して、次のページに移動するプログラムを書いております。 dim wbrowser as object Set wBrowser = CreateObject("InternetExplorer.Application") wBrowser.all.Item(11).Click ここで、 メッセージボックスが表示され「はい・キャンセル」を選択しなければなりません エンターをSendkeysでよいのですが sendkeys "{Enter}" と記載しても、その前にIEオブジェクトに制御が移動するようで、できません 何方か解決策がありましたらお教え下しさい
プロセスもういっこ作ってそこで制御
239 :
237 :2007/03/17(土) 13:10:46
>>238 237は
某掲示板で非同期でよる方法で解決しました。
wBrowser.Document.Script.setTimeout "javascript:document.all.item(11).click()",1000
>プロセスもういっこ作ってそこで制御
そのやり方がいまいちよくわからないので・・・・
リンクが、下記のようにJavaで_blankの指定があるようで勝手にIEが表示されます
<a href="javascript:void(0);" onclick="doOpen5('hogehoge')">
これをIEオブジェクトで何とかしたいのですが、よろしければお教えくださいm(__)m
テレビ番組の番組表なんですけど その日によってURLが変わるんですけど これをお気に入りにできませんか? スクリプトのようなお気に入りってできます? ローカルHTMLを経由してやるのは簡単ですが ちょっと醜いやり方のような・・・
IEコンポーネントに関係あるかなぁそれ。 日付に合わせてURLを作成して移動するbookmarklet作ればいいんでない?
243 :
241 :2007/03/25(日) 09:45:27
THX! javascript:ってやつですね? IE特有の機能で、多分スクリプトに関係しているので ここか、と思いました。 普通のHTML内のスクリプトとはちょっと違いますし・・・ (上述のローカルHTMLならそうかも) ちなみにここってBHOとかは作らないんですか? どうもありがとうございました。
244 :
243 :2007/03/31(土) 00:23:07
ええともはやスレ違いなので質問という訳ではなく 独り言なのですが・・・ ブックマークレットってローカルファイルを表示中のIEからは スクリプトブロックされて動かないみたいですね・・・ (XP SP2以前は動いたような?) というかこういうのってどのスレに行けばいいのだろうか? WSHでもHTAでもHTMLでもないし・・・
>>244 Web制作板だっけ? そんな板があったハズ。
246 :
244 :2007/03/31(土) 16:48:21
質問です。 Private Sub currentWebBrowser_documentComplete(ByVal obj As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Dim doc As mshtml.IHTMLDocument2 = CType(currentWebBrowser.Document, mshtml.IHTMLDocument2) Dim anchors As mshtml.IHTMLElementCollection = doc.anchors For Each elem As mshtml.IHTMLElement2 In anchors Dim htmlevents As mshtml.HTMLAnchorEvents2_Event = CType(elem, mshtml.HTMLAnchorEvents2_Event) AddHandler htmlevents.onclick, AddressOf anchor_onclick Next End Sub こんな感じで、アンカー要素のクリックイベントにanchor_onclickメソッドを関連付けたいのですが、 イベントが返ってこない?ようです。他の要素をHTMLElementEvent2_Eventにキャストして、 同じようにイベントを設定した場合は普通に動きます。どうすればいいでしょうか?
他と全く同じようにしてムリならばムリなんだろう
選択範囲の座標を得る方法を教えて下さい。 IHTMLTxtRange 辺りかな?と思ったのですが、分かりませんでした。
250 :
デフォルトの名無しさん :2007/04/18(水) 22:08:02
このスレってまだ生きていますよね。 IEコンポ使ってhtmlの表示を行っている途中で ある特定の<img src="xxx">が出現したら、その画像を置き換えたいのですが やり方がどうもわかりません。 htmlを書き換えて一時ファイルを作成してとかではなく、メモリストリームとかで処理したいのですが ヒントとか、解説があるサイトとかあれば教えてください。
>>250 馬鹿のスクリプト厨で当然.NETもよく知らない俺ですが
ActiveXならbody.onloadのタイミングとかで
document.imagesを調べる、というのでは駄目でしょうか?
>>249 馬鹿のスクリプト厨です
IWebBrowser2::get_Document ->
IDispatch::QueryInterface(IID_IHTMLDocument2) ->
IHTMLDocument2::get_selection ->
IHTMLSelectionObject::createRange ->
IDispatch::QueryInterface(IID_IHTMLTxtRange) ->
IHTMLTxtRange::get_text
で、できました。スクリプトの場合と殆ど同じですね
254 :
249 :2007/04/20(金) 08:23:56
>253 どうもありがとうございます。 ただ、IHTMLTxtRange::get_textって、選択された文字列そのものですよね? あいうえお ~~~~~~ ↑ここが選択されている場合、「いうえ」が納まっている。 私が欲しいのは文字列そのものではなく、その選択されている範囲座標なんです。 例えば、xy座標で、左上が10:10、右下が20:60 みたいな。 要は、マウスでクリックした座標が、選択範囲内か、そこから外れた位置なのか? を知りたいわけです。
255 :
253 :2007/04/20(金) 21:54:40
>>254 おおこれは大変勘違いしました。お恥ずかしい・・・
どうも申し訳ございません。忘れてください・・・
選択されていれば範囲内 選択されていなければ範囲外
IHTMLDocumentから何とかIWebBrowserを取得する事ってできないですかね?
「IHTMLDocument2からIWebBrowser2を取得する」なら 「ウインドウハンドルからIWebBrowser2を取得したい」で ぐぐって出てくるコードに該当個所がある。
250とかぶるけど、特定のURLへのリクエストを別のURLにリダイレクトしたい。 Navigate()再発行とかするとimg srcでうまくいかないからダメ。 OnBeforeNavigate2とかのタイミングで、URLをコッソリ書き換えることが出来ればいいんだが。 IInternetProtocolImplとかそのあたりを実装するんじゃまいかと思ってるんだが、誰か知らない?
知らんけどイベントハンドラ実装した?
261 :
259 :2007/05/17(木) 18:56:01
>>260 OnBeforeNavigateイベントでURLを取得は出来るが、LPCTSTRなので書き換えは出来ない。
たぶんイベントじゃないと思うんだよね。PassthroughAPPとかそのあたりのヨカン。
ドキュメントが少なすぎてわからん。
OnBeforeNavigateでキャンセルしてNavigateじゃだめなん?
263 :
259 :2007/05/18(金) 11:49:16
>>262 それだと<img src=""> のときに画像表示がキャンセルされてページが遷移しちゃうからダメ。
264 :
259 :2007/05/18(金) 12:10:07
説明が足りないみたいなのでもう一回。 ある書き換え不能なサイトのHTMLに、存在しないサーバへの画像リンクが多数埋め込まれている。 オレは本当の画像の所在を知っているので、問い合わせ先サーバ名をこっそり差し替え、存在しないサーバが存在するかのようにレンダリングしたい。 プロセス外に影響がないようにしたいので、etc/hosts をいじるとかはしたくない。
オミトロンを使えばいいような気がする
266 :
259 :2007/05/18(金) 18:37:59
>> 265 あーほんとだー できそうだー
お世話になります。IEコンポーネントを使う練習をしていまして、 以下のようなコードを書きましたが、どうしても画像のダウンロードをコントロールできません。 そもそも、Invokeが呼び出されません。どこが間違っているのでしょうか? VS2005です。 class CAmbientDispatch : public CComObjectRoot, public IDispatchImpl<IDispatch> { public: BEGIN_COM_MAP(CAmbientDispatch) COM_INTERFACE_ENTRY(IUnknown) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr) { if (dispidMember == DISPID_AMBIENT_DLCONTROL) { V_VT(pvarResult) = VT_I4; V_I4(pvarResult) = DLCTL_DOWNLOADONLY | DLCTL_NO_SCRIPTS | DLCTL_NO_JAVA | DLCTL_NO_DLACTIVEXCTLS | DLCTL_NO_RUNACTIVEXCTLS; } return S_OK; } }; CComObject<CAmbientDispatch> ad;
CAxWindow ie; ie.Create(*this, rect, _T("Shell.Explorer"), WS_CHILD|WS_VISIBLE); CComPtr<IAxWinAmbientDispatchEx> adex; ie.QueryHost(&adex); adex->SetAmbientDispatch(&ad); CComPtr<IWebBrowser2> wb2; ie.QueryControl(&wb2); CComQIPtr<IOleControl> poc(wb2); poc->OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
Vista絡みで質問です。
CoCreateInstance()にて生成したIEに対して Navigate() すると新しく別のウィンドウが開いてしまいます。
元のIEのアドレスバーに適当なURLを入れると、
「この Web ページを開くために、Internet Explorer で新しいウィンドウを開く必要があります。
お使いのコンピュータのセキュリティのため、違うゾーンの Web サイトは別のウィンドウで開く必要があります。」
と言われて、また別のIEが開いてしまいます。Win2K(IE6)では動作確認済みです。
CoCreateInstance( CLSID_InternetExplorer, NULL, CLSCTX_ALL, IID_IWebBrowser2, (void**)&iweb ) );
iweb->put_Visible( VARIANT_TRUE );
CComVariant url( "
http://www.google.com/ " ), flags( 0 ), target( "" ), post( "" ), headers( "" );
iweb->Navigate2( &url, &flags, &target, &post, &headers );
エラー処理は省略してますがこんな感じです。
何か処理が足りて無いのだと思うのですが、よろしく願いします。
>>269 Vistaを使ってないのでわからないですが、
Vistaでは他のゾーンにジャンプする場合
必ず他ウィンドウで開く仕様なんじゃないですか?
最初にInternetExplorerオブジェクトが生成された場合のゾーンが
インターネットゾーンじゃないんでしょうね。
XPでもオブジェクト生成すると
アドレスバーには何も無いものが出てくるので
初期ゾーンが何かよくわからないですが・・・
くだらないやり方ですがiexplore.exeにURLを指定して起動すれば
ゾーン間ジャンプを避けられるんじゃないでしょうか?
それで後からShell.ApplictionでIWebBrowserを探して取得する、とか。
>>267 私はATLもMFCも知らないのでよくわかりませんが、
Invokeが呼び出されない、というからには
IDispatchが使われてないんでしょう。
IDispatch継承のカスタムインターフェースを実装したオブジェクトの場合
IDispatchが呼び出されるかカスタム部分が呼び出されるかは
場合によって異なります。
スクリプト言語やVBでレイトバインディングを使うと
IDispatchが呼び出されますが
それ以外の多くの場合にはカスタム部分が呼び出され、
IDispatchは無視されるはずです。
272 :
VC-- :2007/06/30(土) 17:34:02
vcでCHtmlViewを継承して、javascriptを操作するプログラムを作りたいんですが・・・ とりあえず、CHtmlView::Navigate2を使って、URLを表示しただけで、具体的な方法が わかりません。 例えば、あるサイトで画像をクリックしたら、画像が変化する(javascriptで実装)みたいなプログラム があったとして、擬似的に発動させる方法が知りたいです。 キーボードイベント、マウスイベントで発生させる以外の方法で 知ってたらご教授願いします。
273 :
デフォルトの名無しさん :2007/07/12(木) 01:24:53
_,l;;;;;;;;;;;;;;;;;;;;;;;;;;;l,,_ ,.r'´,. -┐ ':..,゙ヽ ,r' ,::;:' ,ノ ヽ、 ゙:::.ヽ ,.' _.,:;:'___ _立_ ___;;ミ゙、  ̄ノ ̄| ̄ .l厄巳厄巳厄 i王i ,.巳厄巳厄巳l ,勹 .├‐'' l´ , "´  ̄ ̄ ̄ `'''′  ̄ ̄ ̄`.:`{ ´_フ ヽ、_, | l ;;:.,. ::、. ... '゙| ,.-''、.,! ,.::' ヽ、:.゙、 ;;.:' '' ヽ | ,.、 __l__ ./ 、/ `ヾー─tッ-ヽ'' kーtr─ツ'´〕. ヽ. | / {´i Y::::.. ` ̄ ̄´.: "i! ::. 、` ̄´ ゙:::.、} r、 l i,____ | ヾ_,,入;:::.. `'' " ´.::; .::i! ::.. ``` :. }ツl l \ ノ ヾ ;:::. .:r'' :: ll! :ヽ;:..:. .: j,ノ ,! ┬‐┌,┴┐ ヽ',,;l ゙i ;::.. _ `ヽ、;;,,,,'.ィ'' _,, .::,;r'1,,,/ l__ ノl士 ッジ::::::| ゙ ,r'´:::;;;;;;;::> 弋´;;;;;::::ヽ'" |:::::゙'イィ ノ凵 l土 弍:::::::::::l /:::;r'´ ,,..-ー…ー-、 ヾ;:::'、 |:::::::::::ヒ シ:::::::::::l i':::,! ´ __ ゙ l::::l:. |::::::::::ス __ヽ__‐┬┐ 彡;:;:::::l l:::l ''''''''⇒;;;:, l:::l |::::;;ャ` ニ メ ,ノ ,r', 广'`ヽl:::l ::::. .:: ゙::. l::l ノ^i`、 l ̄l ハヽヽ ,イ(:::j i::;ヘ :;:. .:: l::l'" l:ヽヽ  ̄  ̄ |;:ヽヽ l::l ヽ ;:.... .. .. : /l::l ノ ,.イ |;:;:;:;\\ l::l ', :;.:;::::::::::..::. / l::l,r'' /;:;:;|
274 :
デフォルトの名無しさん :2007/08/04(土) 13:58:59
IEとかエクスプローラのアドレスバーから検索するときの urlってどこから取得できるんだろう
レジストリでも検索してみたら?
regmonでみれば?
277 :
デフォルトの名無しさん :2007/08/15(水) 11:42:40
もうどうしても解決できなかったので質問させてください。
downloadcompleteイベントだけがどうしても発生しません。
環境 EXCEL2003sp2 VBA XPSP2 ブラウザ6.0
navigatecomplete2,documentcompleteは発生します。ただrefreshをさせたときは動作しない、(上のほうのレスにもあります)ので
downloadcompleteを使いたいのです。
一番近い私と同じ症状を下記ページで見つけました
http://www.microsoft.com/japan/msdn/community/gdn/ml/WebTech_beginners.aspx ↑の「WebBrowser コンポーネントの DownloadComplete イベントにうついて」です。
がmshtml.dllはPCに入っています。参照設定に問題あるのかと思いましたが、よく分かりませんでした。
F2キーを押してオブジェクトブラウザを見てもちゃんとdownloadcompleteはありますから、問題はないと思うのですが・・。
busyをdo loopはできればやりたくないです。
StatusTextChangeを使うのもサイトによっては問題が起きるでしょうからできれば避けたいです。
問題のxlsファイルをUPすることもできます。
すでに開いているIEのセッションからクッキーを取り出し、 IEコンポーネントを利用した自アプリでそのクッキーの情報を使う、 みたいなことは可能でしょうか? あるいは単純に既存のIEと自アプリとでセッションを共有できればいいのですが、 レジストリでBrowseNewProcessというキーをNoにすることで全てのIEが 同一のプロセスで起動されるという情報がMSサイトにありましたが、 どうも効果がないようなんです。
IEコンポーネントで自分のuseragentを取得するのはどうやるんだぜ? JavaScriptsだとnavigator.userAgentだと思うがVC++のやりかたわからんのだぜ
UrlMkGetSessionOption
IWebBrowser2::GetLocationURLでIEで表示されいてるURLを取得したのですが、IE7などのタブで現在表示されているかいないかの判定方法があれば教えて下さい。
IEコンポを使った専用ブラウザを作ったのだけど、 ツール>インターネットオプション>セキュリティ>レベルのカスタマイズ その他>混在したコンテンツを表示する をOFFにしたいんだけど、どのInterfaceから操作できるんでしょうか?
ie6までは、貼り付けたieコンポーネント内のリンクを ユーザーが Enterキーで開くことが出来たのですが、 ie7から、開くことが出来なくなりました キー操作でリンクを開く方法って、ないでしょうか???
287 :
デフォルトの名無しさん :2007/09/26(水) 13:40:19
http://www.nitoyon.com/vc/tips/ie_component.htm ↑のHPの真ん中当たりのページを解析する/変更する2のソースなのですが、
コピペして実行しても期待通りの動作をしません。
if( strcmp( pszBuf, "temp") == 0){
// innerHTML を設定
pElement->put_innerHTML( L"hogehoge") ;
}
このif文の中には入るのですが、put_innerHTMLでHTMLにhogehogeと表示させる事が出来ません。
対象のHTMLには<p id="temp"></p>のように記述しています。
どなたか詳しい方助けてください。
>>287 俺がやったらうまくいったよ。
そのページを書いた人もおそらくうまくいっただろうし、
お前のプログラムに何か問題があるんだと思う。
何か変にいじっていない?
289 :
デフォルトの名無しさん :2007/09/26(水) 21:21:21
>>288 特にいじってないですが・・・
その試してみたソースうpしてもらえませんか?
それか俺のHTMLの方のソースに問題があるのかな・・・
そっちの線はうすいと思うけど・・・
291 :
デフォルトの名無しさん :2007/09/26(水) 23:22:34
>>290 ありがとうございます。ちょっと今アホな事してしまって開発環境があぼんしてしまったので、
再度環境を整えたら試してみます。
>>291 ん~どうやら
pElement->put_innerHTML( L"hogehoge");
の文でデバッガが立ち上がって落ちます。
<body>タグの間に
<p><div id="temp"></div></p>
って書いてるのですが、もしかして根本的に何か違いますかコレ
と、思ったら、ビルドをdebugからreleaseに変えたら無事動作しましたm(_ _)m
IEコンポーネントを利用してWin32で作成したウィンドウ内にHTMLを表示させているのですが、 表示させているHTML内のJavaScriptから、アプリケーション側の関数を実行する事は可能でしょうか?
ウイルスでも仕込むつもり?
>>295 いえ、ただJavaScriptで出来ない処理をアプリケーションに任せようと思って・・・。
逆は出来るんですけど、JavaScript側からアプリケーションの関数の実行は出来ないのでしょうか?
>>296 できるよ。externalで実装する。説明はめんどくさいからしないけど、
需要がある話なのでMSDNとかに載ってるんじゃないかなあ。
>>297 externalですか。ちょっとググってみます。
なんか1から丁寧に解説してくれてるサイトがあればいいのですが、
なかなかそういうのが見つからなくて結構困ってます。
VisualStudioの構造体の中身が勝手に表示される機能をつかって、
メソッド名から機能を予測して色々試してみる方法には限界が・・・
今アプリケーション側からJavaScriptの関数の実行はURLにjavascript:関数();でやってるのですが、 external使うともう少しちゃんとした方法で出来そうな感じですね。ただ使い方がさっぱりですが。
WebBrowser1と2じゃまた違うっぽいですね。1ならいっぱい転がってるのに。。。 C#とVBばかりでなかなか読めないけど・・・
>>301 WebBroser1と2?なんか勘違いしてる気がするなあ。
externalはキーワードとしてちょっと曖昧だったかも。GetExternalで再度。
DonutRAPTとかでも実装してた気がするから、見ようと思えば見れると思う。
COMだから、C#/VB.NETよりC++のほうが普通に楽ですよ。
>>301 GetExternalだともっと情報が少なくなってますね・・・。
色々見てるとInvoke()とかInvokeScript()あたりが臭そうなのですが、
引数が多い上に、それぞれの引数が何を意味しているのか分からないので全く使えないのが現状です。
IDocHostUIHandlerインターフェース実装してGetExternalでIDispatchインターフェース実装したクラスのポインタ食わせてやればいけるはずだったと思うが。
>>304 とりあえずIDocHostUIHandlerインタフェースの実装が出来そうで出来ないところまできてます。
MSDNを参考にしているのですが、なかなかCOM自体に不慣れでてこずってます。
1日中やってて何も進まないと鬱になってきますね。何か本買ったほうがいいのでしょうか?
ネットの情報だけじゃとても出来るようになる気がしません。
それとはまた違う話になってしまうのですが、
char cmd[128];
for( i=0; i<5; i++){
wsprintf(cmd, "javascript:test(%d);", i);
CComVariant vUrl(cmd), vempty;
pWB2->Navigate2(&vUrl, &vempty, &vempty, &vempty, &vempty);
}
このような形でJSの test(int) 関数を5回実行しようとしても、どうやら実際には1回しか実行されないようです。
実際に実行されるのは test(5); のみです。これは仕様なのでしょうか?普通の関数のように使えないですか?
NavigateComplete2とか待たないといけないんじゃね
>>306 それをキーワードに検索するといい感じのがヒットしたので使ってみました。
以下のコードをNavigate2の後に入れたのですが無限ループになってしまいますね。
while(pWB2->get_Busy(&pBusy)==VARIANT_TRUE || pWB2->get_ReadyState(&state)!=READYSTATE_COMPLETE){
Sleep(100);
}
なんか全然COMを理解してないような気がするのですが、少しソースを見ていただけないでしょうか?
http://ossan.fam.cx/up/uploda1/loda.cgi?mode=dl&file=441 パスはieです。
IEコンポーネントなんだけど、そのプロセスでだけキャッシュの保存先を 変更ってできる?
ゲッラゲラ笑った C++系以外の言語から移植して気付いてないとかか?
Returns S_OK if successful, or an error value otherwise.
>>312 MSDN見て設計を変えてみました。
pWB2->Navigate2(&vUrl, &vempty, &vempty, &vempty, &vempty);
if(pWB2->get_ReadyState(&state)==S_OK){
MessageBox(NULL, "ReadyStateが成功", NULL, MB_OK);
}
これでMessageBoxが出るのですが、一応目的通り、01234と表示されました。
しかし、MessageBoxをSleep(100);に置換すると 4 とだけ表示されてしまいます。
stateの値をチェックしたところ常に1であるようです。
1はREADYSTATE_LOADINGで読み込み中(?)という事らしいのですが、
ここでREADYSTATE_COMPLETEが来ないのは何故なんでしょうか?
やはり、READYSTATE_COMPLETEが来ないです。 while(hr=pWB2->get_Busy(&pBusy), (hr!=S_OK || pBusy==VARIANT_TRUE)){ MessageBox(NULL, "get_Busy failed, or the control is busy", NULL, MB_OK); } while(hr=pWB2->get_ReadyState(&state), (hr!=S_OK || state!=READYSTATE_COMPLETE)){ MessageBox(NULL, "get_ReadyState failed or Object hasn't received all of its data", NULL, MB_OK); } 同じような症状の方がいたのでそれを参考に調べてみて以下のコードを足してみたのですが解決できませんでした。 pWB2->put_Visible(VARIANT_TRUE);
COMどころかスレッドも理解してないじゃん
javascript:test();に問題があるかも
結局どうすれば解決できるのでしょうか?
はい
>>317 こいつは自分で考える気が微塵もないクソ野郎です。以下放置で。
>>319 なんでそんなに執拗にからんでくるんですか?
ちゃんと考えてるし、色々努力してます。どうやら才能がないらしいですが。。。
321 :
デフォルトの名無しさん :2007/10/18(木) 05:17:57
質問です。 クッキーによるセッション管理をしてるサイトなのですが 途中まで、WebRequestクラスでログイン処理などをした後 その情報を使って、WebBrowserコンポーネントでそのサイトにアクセスしたいのです。 そこでクッキーを引き継がせる方法を考えたのですが WebRequest側は、CookieContainerでクッキーを保持してるのですが IEコンポネ側に対応したプロパティーが見当たりません。 何かいい方法はありませんでしょうか? よろしくお願いします。 環境はC♯です。
いい方法はあります。
なんか、変な流れになっちまったな。
変な応答してるヤツは何がしたいんだ?
>>321 手軽な方法としては、一度、
WebBrowserのdocumentプロパティを
mshtml.IHTMLDocument2にキャストして
writeの中に、WebRequestクラスで受信したデータを放り込めば
クッキー情報含めて引き継がれるよん。
>>323 出来ない。
APIのInternetSetCookie で設定する。
つくればいいじゃない
Temporary Internet Files の保存先を任意のフォルダに変更したいんだけど どこいじればいい? 同時に立ち上がってるほかのプロセスに影響なく、特定のIWebBrowserのインスタンスだけ 変更できるとうれしいんだけど。
普通に無理だろ常識的に考えて
IEコンポーネントを使わなければおk
330 :
327 :2007/11/08(木) 11:06:15
>>328 そうかな。。。出来ても良さそうなもんだけどなあ。。
IEの関数コールを監視して、どこでフォルダアクセスしてるか見れば? 最悪その関数をそのプロセスに対して差し替えて実現。
関数とかAPIとかのレベルじゃなくね?
フック。
定番の質問だが ・IEのクリック音を止めたい ・Temporary Internet Filesの位置を変えたい ・Proxyを追加したい。 この辺の事は、コンポネには装備されてなくて IE自体も、直接レジストリを操作してるから どうしてもやりたいなら、該当するレジストリの箇所を書き換えるしかない。
レジストリを書き替えたら当然純正IEにも影響が出ることをお忘れなく
if( strcmp(id, "foo") == 0 ){ pElement->put_innerHTML(A2OLE(boo)); } こんな感じでidがfooである領域を書き換える事は可能だけど、 この領域に文字列を単純に追加する事って出来る? 今のところfoo内を読み込んで、strcatで文字を追加した後put_innerHTMLでやってるんだけど、 これじゃ二度手間な気がするんだが。。。
あるツールの開発でIEコンポーネントを使うか否かを検討しています。 例えば、IEコンポーネントを用いたミニブラウザの場合、複数起動しても、 それぞれが独立したcookie情報を用いることは可能でしょうか。
独立したCookieってどういうこと? つかIE複数立ち上げて見ればわかるんじゃね
>>337 ブラウザが起動してる限り有効なクッキーの話だよね?
>>338 がいうようにIE複数起動したときの動作がそのままIEコンポアプリ複数起動だとおもう。
たぶんクッキーは別になるんじゃないかな。
ちょっと質問が分かりにくかったようで、すみません。 例えば、mixiなどのオートログインが可能なサービスの場合、Cookie情報で これを実現しています。ブラウザを複数起動しても、そのCookie情報が当然、 同じものがサーバーに送られます。(でないと、オートログインできません) で、IEコンポーネントを用いたツールは、あくまでも別ツールなので、 仮にmixiにアクセスしたからと言って、自動でログインされても困るんですね。 そこで、Cookie情報はツールとブラウザとで異なったものにしておきたい。 また、ツールを複数起動した場合も、ツール毎にCookieは分けたいんですね。 で、IEの標準の動作では、複数起動しても、Cookieは共有というか共通になって しまうんですが、IEコンポーネントの使い方次第で、Cookieをブラウザとは 別のものとして管理できるのかを知りたかったのですが、可能でしょうか。
Cookie自体はIEとの共有は避けられないと思った。 ただ、プロセス毎にCookieを利用しないようには出来るから、そのツール側で扱う情報を Cookie以外の手法でなんとかするのがいいんじゃないの?
BeforeNavigate2でヘッダ弄ればなんとでもなるんじゃね?
返答ありがとうございました。 実験してみます。 感謝です
delphi7proでTwebbrowserを使って チェックボックスやボタンを自動でクリックしたりするのをするようなソフトを作っています そこで e := WebBrowser1.OLEObject.Document.documentElement.getElementsByName('なまえ'); としているのですがオートメーションオブジェクトでサポートしていませんというエラーが出てしまいます このエラーはどのような意味なのでしょうか
調べましたが、とっかかりさえ見つからないような状況ですので わかる方がいらっしゃったら教えてください
getElementsByNameメソッドがあるのはDocumentだけだからじゃね? "documentElement"が余計なんじゃね
ありがとうございます e := WebBrowser1.OLEObject.Document.getElementsByName('なまえ'); e.Item(0).click(); のような感じで自動クリックできました
IEコンポーネントでは、HTMLをサイトから読み込んだあと、<IMG>や<IFRAME>内のCGやHTMLを 自動的にサーバーにアクセスして取得しますが、BeforeNavigate2のように、それらのデータを 取得しにいく前にイベントとして拾う方法がありましたら、教えてください。 また、redirectで別サイトにgetを送信する前に、それをイベントとして取得する方法があり ましたら、これについてもお願いします。
自分でイベント作ったら?
352 :
327 :2007/11/28(水) 10:52:27
NtQueryValueKeyにフックをかけて HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache にウソを返すようにしたんだけど、切り替わらないorz
レジストリの値変更しても再起動するまで反映されないんだから システムがどっかメモリ上にキャッシュしてるんだろ
354 :
デフォルトの名無しさん :2007/12/01(土) 18:17:18
VBを使用しております。 IEオブジェクトに表示中の画像ファイルを、指定のフォルダに保存するには どのようにすればよいでしょうか? 要するに、マウスの右クリックで表示される「名前を付けて画像を保存」を自動行いたいのです。 アクセスするたびに、画像は変わるため、URLから指定しDLすることは出来ませんでした。 IEオブジェクトの保存したい画像のアイテムは ie.document.all.item(x) 取得できました、この先がわかりません。 おわかりの方がおられましたらお教えください
SRC見てダウンロードすればいいんじゃね
>>355 URLを見てDLということですか?
アクセスのたびに変わるからNGと記載したのですが・・・
SRCプロパティのことじゃねーのかハゲ
>>357 うーんよくわかりません。
そのSRCプロパティのURLからDLすると、画像ファイルが変更されNGなのですが?
いみがわからない
アクセスするたびに変わるのは、画像じゃなくてURLのほうじゃねえかw それも変数の値が変わる程度で、呼び出し先のCGIは固定だか?
363 :
デフォルトの名無しさん :2007/12/04(火) 22:56:08
CreateWindowの戻り値がNULLだから。
>>361 画像のURL指定し、ブラウザで表示させ、更新してもそのたびに変わるのですが?
いったいどう固定すると、画像も固定できるのでしょうか?
IEコンポーネントでphpを表示させているのですが 同じURLで、GETで渡す値も全く同じにしてphpにアクセスすると キャッシュを読み込んでいるだけなのか、php自体が実行されません。 php内でMySQLと連携してDBを操作させているのですが、2回目の アクセス以降はDBの操作がされていません。 同じURL、同じGET値でも毎回phpが実行されるようにするにはどうすればいいでしょうか。 試しにIUrlHistoryStgを使って履歴を削除しようと思いましたが 下記のようにインスタンスを取得しようとすると、CLSID_CUrlHistoryが 定義されていない識別子だと言われてしまいます。 IUrlHistoryStg* pUrlHistoryStg = NULL; hr = CoCreateInstance (CLSID_CUrlHistory, NULL, CLSCTX_INPROC, IID_IUrlHistoryStg, (void**)&pUrlHistoryStg);
GET値に乱数を追加する
>>364 画像URLは固定でリロードするたびに画像の内容が変わってしまうと言うことか
だからIEコンポで表示させた画像を取得したいと言うわけか
一時キャッシュ覗いて探してみるとか・・・
まぁ無理なんじゃね?
>>363 解決するためにはどうすればよいですかね?
いくら考えても解決出来ません。 お願いします。 解決方法を教えて下さい。
うっほほほへ!??! できた!!! クハハハハハハwwww やっべぇwwww何コレwwwww気付かなかった俺バカスwwwww ありがとうございましたぁ!! うっひょひょひょwwww
372 :
デフォルトの名無しさん :2007/12/07(金) 19:12:42
C++を使用しています。 子ウィンドウを立ち上げてIEコンポーネントのブラウザを表示させたいのですが、 一度子ウィンドウを消して再度立ち上げるとファイルのダウンロードが発生して表示することができません。 原因に心あたりがある方、教えていただけませんか?
>>360 1.ドキュメント全体をビットマップで保存する
2.特定画像のみビットマップで保存する
3.キャッシュから見つけだして画像を表示する
と、いろいろ試してみたが、そのページのころころ変わる画像はキャッシュされてないっぽいので、
VBでやるなら、1か2になるかなあ
本気でやるならVBじゃなくてC++にしたほうがいいかと
IHTMLDocumentのwrite()ってjavascriptのdocument.writeとは違いますよね。 最初にabout:blank開いてからIHTMLDocument#write()すると書き込めるけど 特定のアドレスのHTML開いた後にIHTMLDocument#write()すると いったんHTMLがクリアされて書き込みになる。 javascriptのdocument.writeみたいに、いつでも書き込むことができるインタフェースないですかね。 innerHTMLとかouterHTMLは事情により使いたくないのです。
同じだよ 読み込み完了後ならjavascriptのdocument.writeもページの置き換えになる やってみろ
ページ移動時のカチッって音を消すにはどうすればいいのでしょうか?
377 :
374 :2007/12/16(日) 13:28:08
>>375 うむープラガブルプロトコルとか特殊なことやって
ページ表示した後だから、うまくいかんのかなー
>>376 visible = falseにしとくか
レジストリいじるかしかない
379 :
374 :2007/12/16(日) 16:57:30
ああああ、言っている意味を把握した。 なるほど、確かにHTML完全に読み終わった後の javascriptのdocument.writeもページ置き換えになるね。 根本的な部分で理解が欠けていた・・・ ふむーじゃあ何とかしてDocumentCompleteさせなきゃいいのか。
innerHTMLとかで書けばいいんでないの?
>>378 pWB2.setVisible(FALSE);
じゃダメですか?何も変化がないのですが・・・
>>380 いや、それだと糞重いんで、なんとかしてdocument.write使いたいなと。
iframe src="about:blank"
として、そこに書き出すことで解決!
383 :
374 :2007/12/16(日) 19:30:09
>>382 は漏れ。
あと気になることが。
IHTMLDocument2#writeサンプルの後半部分
hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hresult = SafeArrayUnaccessData(sfArray);
hresult = document->write(sfArray);
cleanup:
SysFreeString(bstr);
if (sfArray != NULL) {
SafeArrayDestroy(sfArray);
}
たいていは大丈夫なんだけど大量にdocument->write呼んでたら
SafeArrayDestroy(sfArray);
で、heapが壊れたとかで落ちた。
で、cleanupのとこをこうしたら落ちなくなった。
cleanup:
if (bstr != NULL) {
SysFreeString(bstr);
hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
param->vt = VT_BSTR;
param->bstrVal = NULL;
hresult = SafeArrayUnaccessData(sfArray);
}
if (sfArray != NULL) {
SafeArrayDestroy(sfArray);
}
これはサンプルのバグかな。
384 :
374 :2007/12/16(日) 19:31:53
SafeArrayDestoryって要素の中身もvt見て、 VT_BSTRだったら勝手にSysFreeStringをやってくれるんだろうか。 だから先にSysFreeStringしちゃうと2重Freeで落ちるのかな。
IEコンポを使っている2ちゃんねるブラウザがその方法で追記してるから 不可能ではないはず
セキュリティーゾーンとかでいろいろ面倒だった気はするが
CHtmlView内で起こったスクリプトエラーをフックできないのですか? おしえてエロい人
>>385 よく見かけるdelphiのコードではレイトバインディングで型変換はシステム任せにして
えいやっとwriteするけれど、きっとディスパッチの手間だけ速度では損するんだろうな。
389 :
374 :2007/12/17(月) 00:01:35
>>385 あ、おいらへのレス?
about:blankで開いたページならdoument.writeでも切り替わらないよ。
2ちゃんブラウザはたいていabout:blankに書いてるし。
あとはjavascriptでロード時に実行されるように書くか。
>>269 Vistaにしたら、そうなってしもうた。
>>270 の方法で解決しそうだけど回りくどいな。
>>391 いいからその方法をとっとと書けよクズが。
知っててワザとやってるなら性格悪いだけのクズだな。
どうしよっかな~
>>392 すごい時刻ゲットしてるからって嫉妬すんなよw
なんでこのスレには糞しかいないんだよ。 IEコンポーネント使う少ない人達同士仲良くしろよ畜生
自分の質問の答えが返ってこない=糞 ですか。そうですか。
>>395 自称糞じゃないお前がじゃんじゃん質問答えろ
手始に387からな、12時間まってやるから早くしろよ
自分の質問の答えが返ってこない=糞だとは誰も言ってねぇだろが。
>>391 さんは性格がいいですね?こうですか?わかりません><
じゃあ横で俺が答えてみようか。
つーかキーワードでググったらここの
>>235 がヒットしたんだが。
まぁ言ってる事に同感できなくはないが、口が悪い。 スレが荒れる。
IEのレンダリング結果において、XY座標から、近傍のテキストを 取得するにはどうしたらいいですか? IHTMLDocument2::elementFromPoint() で、エレメントを取得できるのはわかったのですが、もっと 1 文字単位で 文字を検出したいのです。できたら、エレメント内あるいはドキュメント全体における 文字の位置がインデックスでわかるとうれしいです。
すくなくともIHTMLDocumentやElementの何かの関数を使えば取れる、 というものではないはず。 血を吐くような努力が必要。てか事実上無理だと思う。
工夫次第で無理ではないな。
404 :
402 :2007/12/20(木) 23:32:51
>>403 だったら具体的なやり方書いてよ、天才プログラマーさん。
>>404 指定座標位置付近の文字をカーソルで選択して
その選択文字列を読み取ればいい。
406 :
403 :2007/12/20(木) 23:50:21
>>404 君はボンクラ
私は天才プログラマー
ということでいいかね。
いいえ
408 :
デフォルトの名無しさん :2007/12/21(金) 08:06:24
409 :
デフォルトの名無しさん :2007/12/21(金) 08:07:35
Vista IE 7.0.6 Vista Grani 3.1 Vista Sleipnir 2.6.1 Vista Firefox 2.0.0.11 Vista Opera 9.24 Vista Safari 3.0.4
>>405 その指定座標付近の文字を選択ってのはどうやるんだ。
選択時のマウス動作をエミュレートすんのか。
412 :
401 :2007/12/21(金) 12:50:22
みなさん、ありがとうございます。やっぱりちょいと難しそうですね。
>>410 カーソルで選択ってものすごい基本的なWindowsAPIじゃん。ウインドウズのプログラマなら誰でも知っているだろ。
マウス動作をエミュレートって・・・アフォカ
>>413 おお?それはテキスト入力にフォーカス当たった状態のこといってんの?
そうじゃなくブラウザ上のふつうのテキスト部分の話とおもったんだが。
それもできるんか。
>>414 基本的なことをまったく理解していないな。ブラウザ上で普通に範囲選択してCtrl+Cあるいは、右クリックでコピーが実行できるじゃん。
それをプログラム的に実行するだけ。
これでWM_COPYとか言ってきたらズゴーなんだが。
JavaScript技でそんなのがあったな。Selectionオブジェクトだかを作って その占有領域の座標を取って処理するの。座標から近傍文字、の逆バージョンだけど、 ユーザーが選択操作してなくてもできてたので、この応用でなんとかならないかな?
419 :
デフォルトの名無しさん :2007/12/21(金) 23:42:10
>>415 いやだから、もっと具体的なコードかけよ、そこまでいうなら。
マウスエミュレートもプゲラって言った以上、それもしないコードだぞ?
まず選択するためには、選択始点のテキストがどの座標に存在するか取得しないといかん。
ってかこの時点でこの件は目標は達成なんだが。
IHTMLElement から、実際の描画に使われてるフォントの種類やサイズを 調べるにはどうしたらいいですか? style とか見ても null なんですが、 他にどこを見ればよいものやら。
いまだに
>>378 が分からないのですが・・・
pWB2->put_Visible(VARIANT_FALSE);
では音は消えませんでした。もう少し詳しく教えて頂けませんか?
サムネイルのような画像を、そのリンク名と関連付けしてデータベース化したいと思っています。 表示中のサムネイル画像ファイルをキャッシュフォルダから拾う方法はあるでしょうか。 キャッシュフォルダには別名で格納されているようで、特定する方法が分かりませんでした。 作成日やサイズで特定しようにも、確実とは行きません。 直接GETする以外で何か良い方法をご存知の方、ご教示いただければと思います。
WinInet経由でいいなら、GetUrlCacheEntryInfoでキャッシュの情報が取れる。
425 :
423 :2008/01/09(水) 09:59:39
>>424 これで何とかなりそうです。
すばらしい情報をありがとうございました。
プロキシ設定を自分のIEコンポーネントだけ別にすることはできますか? InternetSetOption(NULL,.... )だとシステム全体に影響が及んでしまうので、 hInternetを指定して制限をかければいいのだと思いますが コンポーネントが利用中のhInternetを知る方法が無いので困っています
>>426 私のソースにはこんなのがありました:
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, pInfo,sizeof(INTERNET_PROXY_INFO),0);
これで動いてたような気がするけど、何年も前のブツなので要検証。
IEコンポーネントを表示せずに、NavigateやDownloadCompleteを使って、 データの取得を行うことは可能なのでしょうか?
可能です
どうも有り難うございます。 う~ん、すると、Windowsサービス化も可能なんでしょうか? System.Windows.Forms派生のクラスをnewした時点で、 変なことになっちゃうんでしょうか? Windowsサービスは作ったことないので想像もつかないのですが、 通常、UIはサービスを持てないのですよね? デスクトップとの対話をサービスに許可、とか設定せずに、 普通のデーモン的なデータ取得を行えると、だいぶ方向性が広がるのですが。
ううっ、下記の部分、逆でした。 >通常、UIはサービスを持てないのですよね? Windowsサービスは、普通はUIを持てないのですよね。 ユーザがログインしない状況でも、IEコンポーネントでデータ取得を 行えると嬉しいのですが。
それはIEコンポでなければならないのか?
う~ん、取得したDOMを操作して、色々処理するので、 結局、何らかのブラウザエンジンは必要になるのです。 まぁ、ゲッコーとかに乗り換えるっていう手はあるのでしょうが、 IEコンポーネントを頑張って使い続けるか、 オープンソースのブラウザエンジンから不要なところをばっさり切って 使うかは、今後の大きな課題にはなるのですが‥‥。
>>430 そういうことは、人に聞くより自分で試したほうが早いぞ。
質問があります IEではTAB、SHIFT+TABキーでフォーカスの移動が行われますが、 これを外部から行うにはどうすればいいでしょうか TABキーイベントを送る、というのはナシの方向で・・・
SetFocus
IEのフォーム部品はウィンドウを持ってないからSetFocusは役に立たない
IHTMLDocument2::all、 IHTMLDocument2::activeElement、 IHTMLElement2::focus
>126-127 面白そうだと思ってMinGW入れてやってみた。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ g++ -Wall -c MSHTMLTest.cpp -o MSHTMLTest.o In file included from MSHTMLTest.cpp:2: HTMLWindow.h:7:22: mshtmhst.h: No such file or directory In file included from MSHTMLTest.cpp:2: HTMLWindow.h:73: error: ISO C++ forbids declaration of `IDocHostUIHandler' with no type HTMLWindow.h:73: error: expected `;' before '*' token K:\WINLCC\BIN\MAKE.EXE: Error code 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ……人の作ったソースをmakeするのって、ほんと難しいよな。
えーと、要するにmshtmhst.hが無いわけだ。 >127のアーカイブと、MinGWのincludeフォルダの中には無し。 何故かBCCのincludeにあったやつを突っ込んで再度make。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ g++ -Wall -c MSHTMLTest.cpp -o MSHTMLTest.o g++ -Wall -c HTMLWindow.cpp -o HTMLWindow.o g++ -Wall -c OleClientSite.cpp -o OleClientSite.o g++ -Wall -c OleInPlaceSite.cpp -o OleInPlaceSite.o g++ -Wall -c DocHostUiHandler.cpp -o DocHostUiHandler.o DocHostUiHandler.cpp: In member function `virtual HRESULT DocHostUiHandler::GetHostInfo(DOCHOSTUIINFO*)': DocHostUiHandler.cpp:109: error: `DOCHOSTUIFLAG_NO3DOUTERBORDER' was not declared in this scope DocHostUiHandler.cpp:109: warning: unused variable 'DOCHOSTUIFLAG_NO3DOUTERBORDER' K:\WINLCC\BIN\MAKE.EXE: Error code 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 順調かと思ったら、何だこれは…
>>436-438 ありがとうございます!
試してみます!
ダイアログのように一発でやる方法があるかとさがしておりました!
"DOCHOSTUIFLAG_NO3DOUTERBORDER" が定義されていない… mshtmhst.h内で定義されてるはずのものなのか、それ以外のどこかなのかは 判らんが、とにかく無い。
うちのMsHtmHst.hタンには定義されてるよ
よし、Platform SDK落として、中のmshtmhst.hをMinGWのincludeに突っ込んだら出来た。
445 :
デフォルトの名無しさん :2008/01/23(水) 23:59:25
すみません教えてください 取得したpElementがインラインフレームか 普通のフレームかを判定したいのですが 良い方法はあります?
tagName見るなりIHTMLIFrameElement取得してみるなりでいいんじゃね
>>446 ありがとうございます
これをヒントに調べてみます
448 :
デフォルトの名無しさん :2008/01/31(木) 10:55:56
ho
IInternetProtocol::Start()でゴニョゴニョするコードを書いているんだが、 呼び出し元のIWebBrowser2を取得することって出来ないのかな。 複数ウィンドウのブラウザで、IWebBrowser2が複数存在しているので、 グローバル変数では解決出来ない。 スレッドが分かれているわけでもないのでTLSでも解決できない。
>>449 IWindowForBindingUIでググれ
451 :
デフォルトの名無しさん :2008/02/09(土) 01:17:35
すみません 教えてください 過去ログで見た気もしますが 見つけられなくて・・・ get_innerHTMLでHTMLソースを取った場合はIEが有る程度整形して ますが これを メニュー → 表示 → ソースで 表示されるようにオリジナルの大文字・小文字もある状態で 取りたいのですが可能でしょうか?
452 :
デフォルトの名無しさん :2008/02/09(土) 02:09:13
kanou
453 :
451 :2008/02/09(土) 02:27:55
>>452 すみません 困っています
もし よろしければ教えていただけないでしょうか?
454 :
デフォルトの名無しさん :2008/02/09(土) 23:24:16
MFCでURLジャンプ時のスクリプトエラー非表示はどうすればいいですか? IOleCommandTarget::Execで OLECMDID_SHOWSCRIPTERRORを使うのでしたら、 どのように使うのか教えていただきたいです。 【関連事項】 AtlhostEx.h ScriptErrorCommandTargetImpl.h DialogKiller.h
456 :
デフォルトの名無しさん :2008/02/12(火) 13:40:22
CreateWindow("AtlAxWin", "Shell.Explorer.2"・・・ としたときにsubmitやクリックできますか
457 :
デフォルトの名無しさん :2008/02/27(水) 13:53:42
IE7になってマウスの真ん中ボタンで新しいウインドウで 開くようになったんですが、IEコンポーネントを使った あぷりでは、これは自分で書くしかないんでしょうか? それとも簡単に有効にする方法があるんですか? 知っている方いましたら教えてください。
458 :
デフォルトの名無しさん :2008/02/27(水) 14:41:58
IEはIEコンポーネントを使ってるだけで、 真ん中ボタンクリックで新規ウィンドウはIEに実装されただけのもの。 IEコンポーネント自体にそういう機能があるわけではない。
>>458 ありがとう。
ということは自分でやるしかないんですね。
かなり大変そうですけど・・
>>459 おいおい、ボタン押してウィンドウ開くなんて大した手間じゃないだろう
>>456 AtlAxGetControl
AtlAxGetHost
>>460 新しいウィンドウで開くとなると結構処理が必要じゃない?
大抵のダブブラウザは実装してる
ATL使わずにIWebBrowser2のイベントを取得したいんだけど、 どういうコード書けばいいのか参考になるサイトとかないですか 探し方が悪いのかATLなコードしか見つからないんです。
そんな事できるのか・・・
>>463 DWebBrowserEvents2のこと? だったら普通にOLEコントロール扱うようにすればいけるんじゃね?
まあMFCとかATLとか使わずにやろうとすると死ぬほど面倒らしいが。
>>465 うん、DWebBrowserEvents2。
WindowsMobile版のIEコンポーネントを使ってるんだけど、
ATLでの実装がコンパイル通らなくて、
ATLなしでの実装にするか・・・?ってとこにたどり着いたとこ。
死ぬほど面倒ならATLが通る方法調べるほうが楽かなぁ。。
コンパイラはなに?
VS2005Pro、C++でやってる
コンパイルエラーの内容を書いた方がいいのでは。 あと接続ポイント周りをちゃんと理解すると光が見えるかも。
>>466 Essential COMに載ってるよ。ネストクラスしたりとかなり面倒だったけど
ATLなし(Win32SDKのみ)でイベント取得までは確認できた。
VC++あるなら、CHtmlViewのソースでも見るとか。CHtmlViewが使えるならそれ使うに越したことはないと思うが。
IEコンポーネントのJavaScriptを一括で 無効にする方法ってありますか?
あるんじゃないの? 俺はやったことないけど、使っているブラウザ (Donut RAPT)が ボタン1つでオンオフできる機能を持っている。
474 :
デフォルトの名無しさん :2008/04/24(木) 20:30:33
表示してるページで右クリックメニューに追加した「irvineにすべてのURLを送る」みたいのを 自動で実行するのはどうしたらできますか?
MFCで組んでるんですが、いろんなサイトを見ていくと使用メモリが増える一方。 メモリリークしていると思ったほうがいいのでしょうか? それとも履歴蓄積によるものと考えてしまっていいのでしょうか?
>>475 メモリリークっていうか、開放し忘れじゃね?
よくあるみたいだよ。
IEコンポーネントを使うとそうなるって問題もあったはず。 一旦アプリを最小化すると開放されたようになる。 本当にリークしてるのか、本当に開放されてるのか、分からないけどね。
>>477 最小化すると減るのはワーキングセットの量。
なんかFlash関係が動かなかったりするね。
IEコンポーネントでページを開くときに、ソケットで別の端末にページのURLを送って 同じページを開かせるようなプログラムを作ったんですけど CComQIPtr<IWebBrowser2> pWB2 pWB2->Navigate2(メッセージで送られたURL) としてURLにジャンプしようとすると、 「"URL"が見つかりません。パスまたはインターネットアドレスが正しいかどうかを確認してください。」 というメッセージボックスが表示され、メッセージ受信側のクライアントはURLにジャンプできません。 IEコンポーネントで表示させた、そのURLのハイパーリンクを直接クリックした時や 直接IEを起動してアドレス直打ちをした場合、正しくページに飛ぶことが出来ました。 また、メッセージ受信側がIE7を入れている場合ではジャンプできない現象が起きましたが IE6を入れているPCで試したところ、メッセージ受信側もジャンプすることが出来ました。 IE7になってからNavigate2周りで何か変更があったのでしょうか。 おとなしくIE6に戻るしかありませんか?
IEコンポーネントでHTML内に記述されたJavascriptの関数を実行したいのですが、 可能でしょうか?HTMLは自分で用意したものです。
>>482 できるよ。
スクリプトを動的に追加することができるから追加したコードで静的なコードを実行すればいい。
HTMLを自分で用意するんだったらIEコンポーネントでやる用途が想像できないけど?
>>484 window.external経由ならわりと楽勝で。
IE拡張(BrowserObjectHelper)からマイドキュメントフォルダにファイル書き込んでるんだけど IE保護モードがじゃまして書き込めねぇ・・・ いくつかMSのサイト読んでレジストリいじったりしたが、相変わらず駄目だ 誰かやり方おしえて。
アウトプロセスのCOMサーバでも作ってデータ送って書き込ませれば?
ああ、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);
ダイアログに WebBrowser を 貼り付けて 表示しています。 その ページ内で window.close() を 呼んだら ダイアログ自体を終了するようにしたいのですが、 WebBrowserEvents のイベントを取得するような方法しかないのでしょうか?
ローカルにある 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="***" を抽出するプログラムです。
496 :
デフォルトの名無しさん :2008/07/23(水) 00:24:40
IWebBrowser2から作ったIEコンポーネントで、フラッシュゲームのページでゲームのキー入力が 効きません助けてください! IOleInPlaceActiveObject::TranslateAcceleratorもメッセージループ内に入っています!
そういや俺もニコニコとかのフラッシュ使ったページでキー入力効かなかったことがあったな。 どうやって解決したか思い出したら書き込むよ。
498 :
デフォルトの名無しさん :2008/07/23(水) 11:55:03
質問です。 戻る、進むことが出来るか否かを判断するにはどうすればいいんですか? IWebBrower2のメソッドにそれらしき関数が見当たらなかったんだけど
DWebBrowserEvents2のCommandStateChangeかなにか
500 :
デフォルトの名無しさん :2008/07/24(木) 18:42:51
501 :
デフォルトの名無しさん :2008/07/24(木) 20:13:24
VC+ATLでタブブラウザっぽいものを作っています。 DWebBrowserEvents2のDISPID_NEWWINDOW2イベントで、 新しく開く遷移先のアドレスを知るためにはどうしたらいいんですか? OnNewWindow2のハンドラでIEが立ち上がるのをキャンセルするまでは分かったんで巣が。。 Donutのソースみたけどいまいち分かりませんでした・・・
NewWindow3にしちゃうのは?
WSH/VBScriptからNewWindow?でcancelできない?
IE6が入っているPCでは問題なく動作しているプログラムが
IE7が入っているPCで正しい動作をしてくれません。
ttp://www.nitoyon.com/vc/tips/ie_component.htm このサイトを参考にC++(VC++)でIEコンポーネントを呼び出しています。
調べてみると、どうやらIE7でNavigate2を呼び出すと
正しくページに移動できないみたいですね。
色々調べてみたんですけど、VC++でのIEコンポーネントの使用で
IE7に対応させるような方法が分かりません。
IE7環境でVC++からIEコンポーネントを呼び出して
正しくページ移動できるようなプログラムは可能でしょうか。
しらんけど↓でなんとかならんかのお Microsoft Web Browserコントロールのセキュリティを制御する:CodeZine
ページから移動するんじゃなくて、ページごとに作り直すといいんじゃない?
>>504 AtlAxCreateControlExを使用した方法だとうまくいきますよ。
508 :
507 :2008/08/27(水) 22:19:03
>>504 の詳細を聞かずにレスしたので、思っているのとは違う結果になるかもしれない。
補足すると、タブを使用しない。キオスク端末見たいなことをやりたければ、
AtlAxCreateControlExを使用した方法で作れます。
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にアクセスできるでしょうか。
>>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取得ってどうやったらいいのか・・・。
win32oleを使用したことが無いので詳しくは分からないが、IHTMLDocument2のI/Fが取れれば、 メンバ関数elementFromPointでできると思う。
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
517 :
hiro :2008/10/08(水) 14:47:16
>>517 そこの「VC++.NETでの注意点」ってとこ読んだか?
519 :
hiro :2008/10/08(水) 18:50:31
はい、読みました。 昔会社でやってた頃、VC6.0のときは作動できたのですが、 なぜか自宅のVC++.net 2003 Standardではエラーが出るのです。
>>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 );
}
省略
html 関連の質問です。 VC++ 2005、WinXPでプログラムを組んでいますが、あるhtmlファイルからanchorタグを読み込み、リンク先のページを取得したいと思います。 一々、自作のライブラリでリンク先を検出するようだと、作成時間がかかって仕方ないので、どなたか、htmlをパースしてリンク先のアドレスを取得できるような ライブラリや関数などをご存知の方、教えていただけないでしょうか? ---- c++相談室から誘導されてきました。 よろしくお願いします。
その程度の用途でIEコンポーネントなんか使ったら余計時間かかる気がするが。 正規表現かなんかで抽出したほうがはやくね?
マジっすか…… 正規表現だとboost辺りかな…… とりあえず、boost使ってみることにします。 どうもありがとうございました
BHOを作ってるのだが、 VSのプロジェクトのプロパティ>構成プロパティ>デバッグ>コマンド にiexplorer.exeのパス書いて、デバッグ実行すると、 IEが起動して自動的にアタッチしてくれる。 それはいいんだが、なぜかそうやって起動するとIE7+Vistaでの保護モードが無効になってしまう。 その状態でインターネットオプション見ても保護モードにチェックは入ってるのに。 普通にIE起動したら保護モード。 誰か理由説明できる人いる?
その状態で2ch見ても保護モードにならんの?
IOleCommandTargetとかIDocHostUIHandler辺りを使ってIEコンポのカスタマイズやってるんだが、
どうもうまくいかないのでレジストリのキー検索してみた。
するとIDocHostUIHandlerが発見できない。(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A)
OleViewでみてもやっぱりない。
これはウチのレジストリが壊れてる?それともこれが普通で他に原因がある?
PC2台(Pro,Home)とも同じ状況なんで判断が付かない。
環境は XP SP2(一台はSP1から更新、もう一台はSP2デフォ) / IE7(6から更新) / .NET2.0
参考サイトはこの辺
ttp://msdn.microsoft.com/en-us/library/aa770041 (VS.85).aspx
Three interfaces are at the heart of WebBrowser Control UI customization: IDocHostUIHandler, IDocHostUIHandler2, and IDocHostShowUI. These are interfaces that you implement in your application when you want to modify the WebBrowser Control.
528 :
もう見てないよな? :2008/11/14(金) 23:05:07
素のWindows2000
RegExpはVBScript 5.0だろ IE5.0だろ 素のWindows2000だろ
鬼車使っとけ
IDocHostUIHandlerを実装したクラスを適用させるにはどうすりゃいいんでしょうか? NavigateComplete2でSetUIHandlerはイクないみたいなことが色々書いてありますし、 それでは初めてのNavigateの時にはXPスタイルを適用できないみたいですし・・・ GWL_USERDATAをGetWindowLongでIAxWinHostWindowを取得してSetExternalUIHandlerでも出来ないことも無いですが、 D&Dが使えなくなるっぽいなのでこちらもだめみたいです
MFCのソースでも見ればいいんじゃね? Platform SDKに入ってなかったか。
534 :
532 :2008/11/20(木) 11:41:01
MFCの環境が無いので見れません ごめんなさい
>>534 >>533 は「無償配布されてるPlatform SDKを入れてみろ」って言ってるんだと。
>>535 Platform SDKは既に入れてありますが、MFCのソースはどこにありますでしょうか?
mfcディレクトリにはヘッダしか見受けられませんが・・・
src\mfcにないならないんじゃない?
538 :
532 :2008/11/20(木) 13:23:30
src\mfcを検索してみましたが、IDocHostUIHandlerの記述はないようです 本題に戻って、お願いします
540 :
532 :2008/11/20(木) 17:24:56
>>539 こんな方法で出来るとは・・・
神様ありがとうございます
adsf
ie7でShellWindowsの中からactiveなものを見つけることはできないっすか?
MFC(VC++6.0)のCHtmlViewで、右スクロールバーの「現在のスクロール位置」の取得 方法が分かる方はいらっしゃいますでしょうか? いろいろ調べて、試してみたりしたのですが、どうしてもうまくいかないのです…
VS2008 MFCにてIEコンポーネントを使用して自動巡回ソフトを作りたいと 考えています。 IEコンポで指定のページまでは簡単に表示出来たのですが、 フォームに文字(ID/PASS)を入力したり、ボタンをクリックしたりする のはどうやったらいいのでしょうか? 参考になるソースなどあるサイトなどあったら教えて下さい。
まあIHTMLDocument*あたりからDOM経由すればそういうことはできるが、 普通はそういう面倒なことはせずに直接自分でフォーム送信時に送られるリクエストを作成するだろうな。
547 :
デフォルトの名無しさん :2009/01/31(土) 11:54:03
<form ~> <input type="button" value="test" onClick="gotoPage();"> </form> 上の例でボタンを押した時、gotoPage(); を実行させたいんですが 初心者なんでよくわかりません pCollection = pDocument->getElementsByName( _bstr_t( L"namae" ) ); MSHTML::IHTMLFormElementPtr pForm( pCollection->item() ); pForm->submit(); だと、gotoPage(); が実行されないみたいです 誰か教えて下さい。・゚・(つ_⊂)・゚・。ウェーン
548 :
デフォルトの名無しさん :2009/01/31(土) 16:35:51
var vHtmlDocument: IHtmlDocument2; begin vHtmlDocument := EmbeddedWB1.Document as IHtmlDocument2; vHtmlDocument.parentWindow.execScript( 'var select = document.getElementById("test");input.onClic();', 'javascript'); end; デルファイだとこんなの C#わかんない 本当は IHTMLDocument4; IHTMLEventObj; IHTMLDocument2; IHTMLElementCollection; IHTMLElement3; 上記のインターフェース使って やる・・・・
そうか
551 :
デフォルトの名無しさん :2009/03/22(日) 02:24:55
IE8になって、IEコンポーネントを使って値を設定するときのセキュリティの変更があったようです INPUT TYPE="FILE" に設定するのに今までフォーカスを当ててからSendKeyを使っていたのですが、どうやら駄目になった模様・・・ 解決方法はあるのでしょうか
知らんけどタイミングが合ってないだけじゃないのか?
能無しはけーん
それはそれは。。。がんばって!
INPUT TYPE="FILE"でc:\fakepath\~が返ってくるんじゃ使えねー
>>551 clickしてダイアログにsendkeys
>>556 インターネットオプションでセキュリティ緩め
テキストフィールド上で右クリックしたときに出てくるコンテキストメニューに 独自の項目を追加したいんですが、どうやるのかやさしく教えてください。 googleツールバーの「カスタム検索を実行」的な感じにしたいのですが・・・ 一行のテキストフィールドだけにでてくるのかな?これ・・・
>>560 グーグルってこの方法なの?レジストリにないみたいだけど・・・
この方法で階層付きのメニューとかも追加できる?
Item0_0 > Item1_0
> Item1_1
みたいな
navigate "about:home"がダメになったんだけど代わりにどうすりゃいい?
そんなのあったんか!ありがと
about:homeなんて初めて聞いたぞw
おれも自慢したいが思いつかん
about:homeはie8βでフィードバックされてるが直ってないから仕様だな
569 :
デフォルトの名無しさん :2009/06/15(月) 13:45:28
すみません教えてください 現在 get_outerHTMLにてソースの保存を行っています。 ただ、これですとIEが成形したHTMLソースしか取り出せません。 たしか、他にやり方があって、それを使えばコメント等も 忠実に取れるのですが忘れてしまって・・・ 当時の仕様は実際IEが扱っているHTMLソースでOKだったのすが 仕様変更で検索しても見つからず困っています たしか、OLE等でメニューを操作する系だったと思ったのですが どなたか ご存知の方がいましたら教えてください
ExecWB OLECMDID_SAVEAS OLECMDEXECOPT_DONTPROMPTUSERでググれ
573 :
571 :2009/06/15(月) 23:34:59
>>573 URL直接見れる?KWDの前に"?"が入ってないか?
直接見れないならパケットモニタで見てみろよ
もしそれなら
>>574 でいけるはず
文字が化けるならexecute 要素で accept-charset="Shift_JIS"とか試して見れ
576 :
デフォルトの名無しさん :2009/06/21(日) 17:01:32
教えてください DocumentCompleteのタイミングで 現在のドキュメントがフレームの子かどうか調べれるでしょうか?
578 :
デフォルトの名無しさん :2009/06/21(日) 21:46:00
CHtmlViewを使った場合、ブラウザ画面上のテキストを選択状態(マウスでなぞって色が変わっている状態)に なっている部分のHTMLソース上の位置を知りたいのですが、どうすればいいのでしょうか? FireFoxではテキストを選択状態にしてその部分を右クリックすると「選択した部分のソースを表示」という メニューが選べるようになっていて、それと同じようなことをしたいのです。 選択位置の知り方は、HTMLソース上の文字位置(バイト位置)でもいいですし、 DOM上の何番目のタグのinnerTextの何バイト目か?ということでもいいです。 ご存じの方教えてください。
>>579 それでいけそうな気がします。ありがとうございました。
同じ人かな。うまくいったのなら"できたよー"とか一言お願いしますです。
582 :
デフォルトの名無しさん :2009/06/22(月) 05:58:10
>>577 ありがとうございます。
早速みてみます。
納期がせまっていたので助かります
583 :
578 :2009/06/22(月) 22:52:30
IE8の開発者ツールをCHtmlViewから扱えないかな?
585 :
デフォルトの名無しさん :2009/07/05(日) 14:41:41
お願いします。 CHtmlViewでHTML文書のリンク部分をクリックしてもリンク先に飛ばないようにできないでしょうか。 やりたいことは、リンク部分のテキストの一部をマウスでなぞって選択してコピーしたいのです。 しかし選択しようとしてクリックした段階でリンク先に飛んでしまいます。 CHtmlViewの親Wnd側のPreTranslateMessageの中でWM_LBUTTONDOWNを処理しないようにしたら、 テキストが選択できないようになり、これはダメだと分かりました。
Aタグとかを片っ端からSPANか何かに書き換えとくとか
とりあえずページ遷移片っ端から蹴るならBeforeNavigateあたりだっけか
588 :
585 :2009/07/05(日) 15:30:27
BeforeNavigate2()でCancel=TRUE;にするとリンク先に飛ばせないことができました。
しかしマウスでなぞってもリンク文字の一部分だけを選択することができず、、、orz
リンクとしての見栄えを保ったまま一部分だけコピーするのはどうも無理っぽいですね。
>>586 さんのような方法にせざるを得ないと思います。
「WSH(・∀・)スレッド! Part 4」で質問したら、スレ違いと言われたのでこちらで質問させて頂きます。 IEで、Ctrl+Nでウィンドウの新規作成を行った時と等価な状態(セッション情報等を継承)で、 WSHでIEのウィンドウの新規作成を行い、 かつそのIEのウィンドウのオブジェクトIDを得るにはどうしたら宜しいでしょうか?
IEコンポーネントを使ってブラウザを作ってます。 読み込み時等のエラーの際に独自のhtmlを読ませる処理を考えてます。 HTTPステータスをチェックしようと考えてますがWEBを探してもなかなか 見つかりませんでした。_| ̄|○ IEコンポーネントを使った際にステータスコードを拾うことは可能でしょうか? InvokeでHTTPステータスをチェックして別のhtmlを読ませようと考えてます。
>>589 Shell.applicationはIEでないのでスレちがい
592 :
デフォルトの名無しさん :2009/07/09(木) 23:34:03
590応援アゲ
>>590 IE6では、404はとる事は可能。5xx系は試したことが無いのでわからない。
>>InvokeでHTTPステータスをチェックして別のhtmlを読ませようと考えてます。
まさにこのとおりだよ。
以下のような感じ。
IWebBrowser2からIID_IConnectionPointContainerを取り
IID_IConnectionPointContaineから、FindConnectionPoint( DIID_DWebBrowserEvents2)を実行して
DIID_DWebBrowserEvents2からAdviseを使用して自作したInvokeを登録する。
これにより、登録したInvokeがステータス後とに実行される。
CHtmlViewのIHTMLDocuent2のget_innerHTMLのバグについて回避方法をご存じの方お知らせ下さい。 環境はVS2005SP1、IE7です。 例えば以下のようなHTMLファイルを作っておきます。 <html><body><ruby><rb>糞</rb><rt>くそ</rt></ruby>IE</body></html> このHTMLファイルをCHtmlViewにドロップして表示します。 そして以下のコードを実行します。 IHTMLDocument2* doc = (IHTMLDocument2*)m_htmlview.get_Document(); IHTMLElement *body; doc->get_body(&body); CComBSTR tmp; body->get_innerHTML(&tmp); body->put_innerHTML(tmp); body->get_innerHTML(&tmp); body->Release(); doc->Release(); ::OutputDebugString(tmp); これは<body>内部をget_innerHTMLで取り出し、そのままput_innerHTMLで書き込み、またget_innerHTMLで取り出すだけのものです。 <body>内部のコードがそのまま取り出せたら正解ですが、なぜか結果は、 <RUBY>糞</RB><RT>くそ</RT></RUBY>IE となるのです。 <RUBY>の後の<RB>が消えるのです。 いろいろ試したところ、<body>の最初に出てくる文字にルビを振ると、その部分だけ<RB>が消えることが分かりました。 他にもいろいろとIHTMLDocuent2がらみで不可解な動作が多いです。
595 :
デフォルトの名無しさん :2009/07/25(土) 20:30:54
質問です。
http://www.nitoyon.com/vc/tips/ie_component.htmのページのソースに 、
HTMLドキュメントの読み込み完了のイベントを取得したかったので、しかるべき場所に
SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
void _stdcall OnDocumentComplete(){
MessageBox(NULL, "COMP", NULL, NULL);
return;
}
を追加しました。すると、プログラム実行時に
Debug Assertion Failedというエラーが出るようになってしまいました。
何か間違っているでしょうか?
ちなみにエラーダイアログにはExpression: ((HRESULT)(hr) >= 0)と表示されています。
>>595 Debug Assertion Failedのダイアログにエラーの起こったソースファイルと
行番号が書いてあるはずですが?
597 :
デフォルトの名無しさん :2009/07/26(日) 03:03:21
void _stdcall OnDocumentComplete(IDispatch *pDisp, VARIANT *URL)
みたいに引数を入れたらエラーが出なくなりました。失礼しました。
>>596 このエラーの場合、大体問題のある箇所とは全く関係ないソースファイルの行番号が出るんです・・・。
>>597 結論を言うと引数を設定しなかったことにより、スタック不整合による破壊が発生し、
OnDocumentCompleteから戻るときに不定の位置へ実行が戻っている為。
IE で新しいタブを開いて,そのタブを操作するにはどうすればよいですか? IShellWindowsPtr で現在開いているタブについては取得&操作できるのですが.
前後の差分
アクティブなタブはどうすりゃ取れる?
602 :
デフォルトの名無しさん :2009/07/27(月) 19:11:57
>>598 なるほど、わかりやすいです。
でも、コンパイルの時点で警告して欲しいですね。
ちょっと特殊な使い方の質問です <body> ・ ・ ・ <h4>porfile</h4> <p> プロフィール本文 </p> ・ ・ ・ </body> こんな感じの既存HTMLファイルがありまして、<h4>の直後の<p>テキストが取得したいです idはまったく振ってなくて、getElementByID等では取れない状態です <h4>profile</h4>は必ず一つしかないので、それは取れるのですが・・・ getElementで取ってきたタグの「次の」タグを取る方法は無いのでしょうか? よろしくお願いします
nextSiblingだかgetNextSiblingだかってなかったっけ
>>604 それはHTMLDOMNodeにしかなく、これを返す検索系ファンクションが無さそうでしたが
foreachの力業で何とかしました
多少ダサいですが要求仕様は満たせたのでよしです
ありがとうございました
Q. 自動保守#K9K?_D[L とは一体何なのか?
A. 外部サイトへの突撃大好きな真性厨房
韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…
名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』
最近のニュース
8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
本人は体調不良と言っているが…
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
607 :
hasegawa1.isl.titech.ac.jp :2009/09/01(火) 13:04:27
Visual C++ 2005、IE7でBHO作成していますがIEのサイズ変更はどのように 検知すれば良いでしょうか?色々と試していますが 1)親をTabウィンドウとしていますがWM_SIZEメッセージ受け取れず 2)IWebBrowser2へのシンク→DocumentCompleteは拾えるがWindowResizeは反応無し 3)HTMLElementEvents2のシンク→OnClick等は拾えるがOnResizeは反応無し 上記1~3でできるはず、もしくは他の方法でもご存じの方お願いします。
自己レスです。 他の良い方法もありそうですがメッセージフックで解決できました。
自分がいくつめのタブか調べる方法は? 自タブをアクティブにする方法は?
>>589 ctrl+nはexecwb olecmdid_new?
611 :
デフォルトの名無しさん :2009/09/10(木) 18:21:32
お邪魔します。 特定のXHRによる通信をホストかBHOで捕まえて リクエストヘッダやコンテンツを書き換える方法をご存知の方おられませんか?
613 :
デフォルトの名無しさん :2009/09/18(金) 01:00:31
やっとIEコンポーネント+VC++で2ch書き込みが出来ました。 C++でCOMコンポーネントを使うのは鬼のように難しいですね。
ATL使ったのかな? C++Builderなら労力はVC++の1/20くらいになる。 マイナーだけど・・・
MFCだけど。 IHTMLDocument2のインターフェースを取得してから、2ch書き込みフォームのMESSAGEやFROMを更新するまでの 道のりが長いのに驚いた。 IHTMLDocument2→IHTMLElementCollection→IDispatch→IHTMLFormElement→ てな感じでインターフェースを取得して、渡り歩かないといけない。 VBならIE.Document.Form(0).Item("MESSAGE").value="テスト"と、ダイレクトにアクセスできるのに。
#importのほうでやれば、VB並に1行で書けるよ。
どうやってやるの?
ChromeFrame適用しても、とりあえずIEコンポーネントブラウザは動くみたいね。
<input type="file" これに参照ボタンを押さないで入力する方法はないのでしょうか? 信頼済みサイトに登録すれば大丈夫と思ったのですが、できません。
ie7かそれ以前に戻す
入力する方法はある。
c#のWebBrowserコントロールからinput type="file" に ファイルパスを書き込もうとしています。 下記のようなコードを書いているのですが、どうもうまく書き込まれません。 解決法がありましたらご教授ください。 webBrowser.Document.All.GetElementsByName("fileUp")[0].Focus(); SendKeys.SendWait(filePath);
自分で答え書いてて分んないのかなぁ 参照ボタンを押す
SendKeys.Send(filePath); webBrowser.Document.All.GetElementsByName("fileUp")[0].click();
漏れの場合#importの方でやらないとIEを管理者権限で起動しないとnavigateがうまくいかないわ・・
ie出人のことか?捜索して見つければよいではないか?
iくe不明者だろ?
IEコンポーネント、むずかしー><
どこかにいい本ないかな・・・。
CHtmlViewで
1.選択して右クリックしたときにメニューに独自処理を追加。(コピー、すべて選択、は残して)
2.リンクにカーソルを合わせたときにバルーンを表示
というのがやりたいのですが難航中です。
1. は PreTranslateMessage() 使えば横取りできるのは分かったのだけど
そこからサパーリ。
2.は前スレの
>>400-418 に CToolTipCtrl を使えば、とあるのですが単独の出し方が分からない・・・。
IEコンポーネントを使い倒すスレ
http://pc5.2ch.net/tech/kako/982/982930049.html Janeのソース(Pascal)も見てみたのですが独自にWindowを作ってるような感じでした。
JaneってDoeでIEコンポじゃないだろ
navigate(,,tagetframename)が効かない?
631 :
デフォルトの名無しさん :2010/04/06(火) 00:54:27
IInternetProtocol::Start()でパケットをフックしてるんだけど
>>450 を参考にして
IWindowForBindingUIでウィンドウハンドルを取得して
呼び出し元を判断しようとしてるんだけど
ウィンドウハンドルが取れない場合があるのは(画像とかCSS)
IE8のせい?
visible=falseのIEでtarget=_blankのリンクをクリックすると visible=trueのIEが開いてしまうのですが、これを非表示で開くにはどうしたらいいでしょうか? 開いてからvisible=falseを設定しても一瞬ウィンドウが見えて気持ち悪いので。。
タブで開けば
非表示のものをどうやってクリックしているのだろう
.click()だろ
htmlからmsgbox出してたらie.quitできないの?
638 :
デフォルトの名無しさん :2010/06/01(火) 23:35:40
639 :
デフォルトの名無しさん :2010/06/01(火) 23:36:22
18 :名無しさん@どっと混む:2010/01/07(木) 09:26:06 ID:5NL2jyJpO
高根はMASKRでレイプ仲間募集するのやめたんだね
mixiで募集中か
21 :名無しさん@どっと混む:2010/01/10(日) 19:36:45 ID:FdRwgXUTO
風俗店やってるってことは高根社長は暴力団と繋がってるんだね
どこの組にいくらみかじめ料払ってるんだかw
23 :名無しさん@どっと混む:2010/01/23(土) 03:43:12 ID:Pdcv8aq0O
タカネ社長未成年に酒飲ませてレイプ
24 :名無しさん@どっと混む:2010/01/29(金) 18:16:06 ID:zMwtdkIsO
高根社長のレイプ趣味は病気だから治らない
25 :名無しさん@どっと混む:2010/02/01(月) 01:39:32 ID:uaH5mo2nO
前科者
26 :名無しさん@どっと混む:2010/02/09(火) 00:52:46 ID:JwGmN2cG0
>>25 容疑はレイプ?買春?管理売春?公然猥褻?薬物?脱税?詐欺?傷害?
28 :名無しさん@どっと混む:2010/02/14(日) 22:56:30 ID:lykq8x1VO
どこかのスレで人を死に追いやったと書いてあった
33 :名無しさん@どっと混む:2010/03/04(木) 12:49:19 ID:J8YxaRGO0
金がないって脱税がばれて追徴課税でも来たか?
せっかく脱税の隠れ蓑にプレジス営業してるのに残念だったなw
38 :名無しさん@どっと混む:2010/03/12(金) 21:09:53 ID:L0W4+sivO
首吊り首絞めプレイ大好き高根英哉
640 :
デフォルトの名無しさん :2010/06/01(火) 23:37:08
53 :名無しさん@どっと混む:2010/05/17(月) 13:14:06 ID:E/7OZVtz0
>>18 高根英哉blogでレイプ仲間募集中
私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
・SMを実践している、または興味がある
・マスクを用意できる
・都内でイベント参加できる
・イベント内容およびこの仲間を通じて知りえた情報を口外しない
・成人男子である
・携帯電話および携帯メールアドレスを私に公開できる
・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
r2007@maskr.com
maskr_2008@yahoo.co.jp
hide@comrade.co.jp
コピペ君王に俺はなる、まで読んだ。
IEコンポーネントを使ってIE以外のブラウザを操作できないのでしょうか?
>>642 IEコンポーネントさえあれば何でも操作できます
実はDBやレジストリ、ファイル操作もできます
CHtmlViewを使用して表示した画像をファイルに保存するにはどうすればいいでしょうか?
<a href="hoge" onclick="foo();" id="id">bar</a> ってあったとき<a>のonclick属性の文字列(foo();)を取得するにはどうすればよいのでしょうか? <a>のhref属性の文字列は MSHTML::IHTMLElementPtr elem = document->getElementsById("id"); elem->getAttribute(L"href", 0).bstrValr; // -> hoge で取れるのですが、onclick は ↑のL"href"をL"onclick"にしても取れませんでした
elem->onclick;
>>647 ありがとうございます!
_variant_t var(elem->onclick);
としてみると、var は VT_DISPATCH で文字列ではないようなのです...
>>642 Sleipnirなら操作できるのでは?
自分は嫌いだから使わないけど。
650 :
デフォルトの名無しさん :2011/01/21(金) 16:15:02
CHtmlViewに about:blank → IHTMLDocument2::write で書き込んだ文字列の「検索」機能(Ctrl+F)についてなのですが 今までIE6・IE7を使ってるPC環境だと問題なく使えていたのに IE8のPC環境では、文字を検索しても全くヒットしなくなりました。 (何でも「一致する項目はありませんでした」となる) この事象の解決方法が分かる方は、いらっしゃいますでしょうか? ちなみに開発環境は VC++2005 Standard Windows7 です。
closeしてないとか
文字コード
そしゃないunicode
654 :
デフォルトの名無しさん :2011/01/21(金) 22:40:57
>>651 おっしゃる通り、writeの後にcloseしたら、一発で解決しました。
ありがとうございます!
何年も前に書かれたコードだったのですが、IE8になってバグが顕在化したわけですね。
closeしないといけなかったとは、全く知りませんでした。
助かりました。
655 :
デフォルトの名無しさん :2011/01/26(水) 08:08:10
C#のwebBrowserで表示の拡大をする方法はありますか?
657 :
デフォルトの名無しさん :2011/01/26(水) 18:54:26
お~ありがとうございます。 さっそく試してみます。
自分のOSの種類&バージョン情報と64/32bitどちらで動いてるかを知るにはどうすればよいですか?
navigator.userAgent
コンピュータのプロパティ
661 :
デフォルトの名無しさん :2011/02/08(火) 00:32:53
こんにちは。 この度、C++プログラムでhtml上のtextareaに値が入れ方がわからなくて質問をさせて頂きます。 SHDocVwとMSHTMLを使い、html上のtextareaにデータを入れるのを以下のように実装したのですが、入れたはずの値が表示されません。(内部では入っているようですが・・・) なぜ他の項目のように値がみえないのでしょうか? よろしくお願いいたします。 SHDocVw::IWebBrowser2Pt m_pIE.CreateInstance(L"InternetExplorer.Application"); //希望のページに飛ぶ(中略) MSHTML::IHTMLDocument3Ptr pDocument( m_pIE->Document ); pCollection = pDocument->getElementsByTagName(_bstr_t(L"textarea")); for (long i = 0; i < pCollection->length; ++i) { MSHTML::IHTMLTextAreaElementPtr pText(pCollection->item(_variant_t(i))); //!本文 if( !_wcsicmp(pText->name, L"項目名" ) ){ pText->value= _bstr_t( "hoge" ); } } 【環境】Visual C++ 2008 Express Edition
662 :
デフォルトの名無しさん :2011/02/10(木) 01:28:30
↑解決しました。サイト側がhtml方式でした。失礼しました。
いみふ
664 :
デフォルトの名無しさん :2011/03/07(月) 10:58:51.18
へえ
復帰
改行
IEコンポーネントで簡易ブラウザを作ったのですが、 ポップアップ等新しいウィンドウが作られるときにInternet Exploreで作られてしまいます これを自作簡易ブラウザで開くようにしたいのですがどうすればいいですか?
>>668 ありがとうございます
でも.NetのwebBrowser使ってるのでNewWindow2がない・・・
デフォルトブラウザに設定すれば?
>>671 邪道と言われるかもしれなけけど、メインウインドウをIEコンポーネントで作ればjavascriptでの実装も可能
>>672 thx.
でもごめんもう実装してたり。
あとつまってるのは、write()で流し込んでclose()したhtmlが
scrollTo()で思った位置に飛ばせないとこで。
scrollintoviewじゃね
675 :
デフォルトの名無しさん :2012/02/02(木) 11:13:41.69
達人プログラマーさん、助けてください!! 既に開いているIEウィンドウで、以下の様なHTMLを表示しているとします。 ~~(略)~~ <form name="myform"> ... <input type="hidden" id="hogehoge" value="XXXX" /> ... </form> ~~(略)~~ 私の作ったアプリ側で、上記の XXXX にあたる部分を書き換えたいのですが、どうしたらよいでしょうか? 一応、 SHDocVw::IWebBrowser2Ptr pIE = (略) ; // pIE を取得 MSHTML::IHTMLDocument2Ptr pHtmlDoc = pIE->GetDocument(); // htmlドキュメントを取得 MSHTML::IHTMLElementCollectionPtr pHtmlCol = pHtmlDoc->forms; // フォームのオブジェクトを取得 まではできたのですが、ここから行き詰っています。 ぜひご教授下さい。。。
そんなことしなくてもgetElementByIdで取ればよかろう
677 :
デフォルトの名無しさん :2012/02/05(日) 21:55:47.84
IEコンポーネントでアプリケーション独自のクッキーを送ってあげたいんだけど、 IEが元から引っ張ってきているクッキーが邪魔して期待している結果にならない IEが引っ張ってきたクッキーを消して独自のクッキーを送ってあげたいんだけど そういうことってできますか?
678 :
デフォルトの名無しさん :2012/02/06(月) 07:18:33.58
使い方教えて
679 :
デフォルトの名無しさん :2012/02/06(月) 16:57:09.36
使い方教えてよ
XMLHttpRequestの中身を見て、情報によってはリクエストを遮断させたいのですが、 BeforeNavigate2だとXMLHttpRequestのリクエストが取得できませんでした。 ブラウザがXMLHttpRequestでリクエストした情報を取得するには、何を利用したら良いのでしょうか? ノウハウやそれが掲載されているサイトをご教授いただけると助かります。 よろしくおねがいします。
681 :
デフォルトの名無しさん :2012/03/10(土) 22:52:43.61
C++ と WTL で Shell.Explorer.2 を使ってページを表示してるんだけど、 リソース中の mht ファイルを表示する簡単な方法があったら教えてくれ。
mhtml:res://xxx.dll/xxx.mht
ウィンドウをリサイズするとちらつく(一瞬白くなる)んだけど どんな原因が考えられる? 親ウィンドウの背景色は白じゃないし子ウィンドウをクリップしてる。 他にウィンドウは重なってない。 WM_SIZEを捕まえて再描画しないようにするとちらつかないけど更新されない。
685 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/06(金) 22:31:29.85
IWebBrowser2を設定UIに使ってるんだけど マウスでの範囲選択はどうしたら無効にできる?
MOUSEDOWNでReleaseCaptureするとか
MOUSEDOWNってWM_LBUTTONDOWN?
フックするなりなんなりと
689 :
685 :2012/04/07(土) 23:40:05.88
サンクス どうやら俺のレベルがまだ足りていないようだ。 もう少しわかるようになったらまた質問させてください。
タブ付きブラウザを作りたくて、以下のサイトを参照しvb.netで作成しました。
ttp://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserNewWindow2Event.htm しかし、一部のサイトを表示しようとしたところ、スクリプト関係がうまく
いってないのか、IE9で表示するとエラーもなく表示されるのに、
vb.netで作成したブラウザだとスクリプトエラーなのか、
[スクリプトエラー。xxが定義されていません」などと表示されます。
考えられる原因は何があるのでしょうか。
IE9が使っているコンポーネントとvb.netで作成したコンポーネントが
違うことが起因してエラーになってるのでしょうか。
以下のguidの指定が古いとかありますか?現在はIE9を利用しています。
<ComImport(), Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch), _
TypeLibType(TypeLibTypeFlags.FHidden)> _
Public Interface DWebBrowserEvents2
会社の内部のサイトが、IEのみ対応らしいので会社ではIEをメインで使っているのですが、 1. IE7ではpdfにアクセスするとほぼ必ず落ちる。 2. Googleの出力が、Firefoxと違ってアクセス先がpdfかどうか分かりにくい。 で悩んでいます。IE8にアップする以外で対応する方法ありますか? なければ周りの人のIE8の評判聞いてバージョンアップします。
692 :
691 :2012/05/08(火) 23:33:17.70
なんかスレ違いでしたね。すみません。
>1. IE7ではpdfにアクセスするとほぼ必ず落ちる これ環境がおかしいんじゃないのか? 普通落ちることはマレだろ
ブラウザでPDF表示なんて糞だから一番最初に切るものじゃないのか
おお、返事が。
>>693 会社のPCなのでそんなに激しくいじってはいないのですが。逆に言うとまずい原因も分からないのです。
>>694 やっぱそれが一番ですか。そうします。
ところで、
>2. Googleの出力が、Firefoxと違ってアクセス先がpdfかどうか分かりにくい。
が結構めんどくさいと思ってしまうのですが。「○○の最新動向」とか書いてあって
pdfとかだと、なんかだまされた気がしますw
ieとadobe readerはバージョンの組み合わせで相性があるからな
ページ上にあるFlashのボタンをクリックするにはどうすればいいんだろ? elementsとclickで実装しようとしてるけど上手くいかない
flashは画面キャプチャしてボタンを画像認識、mouse_eventでクリック。
そもそもflashのボタンはdomの要素じゃないので押せねえ
GoogleマップのJavaScript変数を取得できないんですけどなんででしょう IEのアドレスバーに javascript:void(prompt('',gApplication.getMap().getCenter())); みたいに入力すると取得できています HRESULT hr; CComBSTR bstrCode(_T("eval(var a = gApplication.getMap().getCenter())")); CComBSTR bstrLang(_T("javascript")); CComPtr<IHTMLDocument2> spHtmlDoc; CComPtr<IHTMLWindow2> spHtmlWin; IHTMLDocument2 *pHtmlDoc = GetDocument2(); if (!pHtmlDoc) return FALSE; spHtmlDoc.Attach(pHtmlDoc); hr = spHtmlDoc->get_parentWindow(&spHtmlWin); if(FAILED(hr)) return FALSE; VARIANT varEmpty = {0}; hr = spHtmlWin->execScript(bstrCode, bstrLang, &varEmpty);
そもそもGoogleマップのURLでevalが以下の方法で見つかりません。 bstrMember は "eval" hr = pHtmlDoc->get_Script(&spScript); (中略) hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,... (中略) hr = spScript->Invoke(dispid,IID_NULL,0,... 次のようにすると見つかります。 hr = spScript->GetDispID(bstrMember, fdexNameCaseSensitive, &dispid); (中略) hr = spScript->InvokeEx(dispid, LOCALE_USER_DEFAULT,... (中略) あと CComPtr<IHTMLScriptElement> spScriptElem; hr = spDisp->QueryInterface( IID_IHTMLScriptElement, (void **)&spScriptElem); で確認するとスクリプトが空なんです。 もうなにがなんだかさっぱりな状態です