IEコンポーネントを使い倒すスレ Ver.2at TECH
IEコンポーネントを使い倒すスレ Ver.2 - 暇つぶし2ch13:デフォルトの名無しさん
06/05/13 17:30:19
>>12
無理。

14:デフォルトの名無しさん
06/05/13 18:15:06
HTMLでデータを表示するなら自前でHTMLファイルを書き出して表示とか。

15:デフォルトの名無しさん
06/05/13 18:37:42
>>13-14
やっぱりっすか。

変数の中身は動的に変化するものなので、
というか時間を管理する変数なので随時C++で更新かけつつ、
JavaScriptでアクセスして表示させたいのです。

Sleipnirでは、現在のアドレスバーとか検索バーの文字列を
取得するActiveXオブジェクトがあるので、そっちの路線で調べて見ます。


URLリンク(www.sleipnir-wiki.jp)

16:デフォルトの名無しさん
06/05/13 20:27:32
COMっていうことになるのかなぁ。


17:デフォルトの名無しさん
06/05/13 21:07:59
正にIEコンポーネントを使い倒せばできるはず。
(倒さなくてもできるとは思うけど)

18:デフォルトの名無しさん
06/05/13 21:13:36
>>12
できます。

19:デフォルトの名無しさん
06/05/13 22:02:41
>>17
>>18
IActiveScript?

20:デフォルトの名無しさん
06/05/13 22:40:31
ちがう

21:デフォルトの名無しさん
06/05/13 22:45:51
確か、MSDN にそのものずばりの HOWTO があったような記憶が・・・
今手元に MSDN が無いのでなんとも言えないけど。
WEB 版は、変わっちゃったんだね。

22:19
06/05/14 01:22:17
MSDNとかざっと見たけど分かんないっす。
URLリンク(www.atmarkit.co.jp)

23:デフォルトの名無しさん
06/05/14 01:57:20
>>12
>プロセス内の変数(WinMainとかで宣言した変数)を、
>IEコンポーネントの中のJavaScriptから参照することはできますでしょうか?

横レスですが
IHTMLDocument::get_Script()とかいう話ではない?
ただ「JavaScriptから変数を参照する」というより
アプリ側から引数として渡すような形になるけど

頓珍漢なこといってたらごめん。


24:22
06/05/14 08:58:57
22のリンク先はIHTMLDocument::get_Script()で行けるのかも…。
ScriptEngineが取得できれば、IActiveScript->AddNamedItemあたりで
アプリ側から名前付きオブジェクトを渡せるから行けるんではと思うけど、
にしても、17,18,20の回答(正解)が気になる…。

25:デフォルトの名無しさん
06/05/14 22:52:04
Win32API質問箱で質問した者ですが、誘導されたので改めて質問させて頂きます。

WinXP SP2のIEで、ダウンロードが自動的に始まるページへ移動すると

"セキュリティ保護のため・・・"

と表示され、自動的にダウンロードが行われないようになっていますが、
IWebBrowserを使用したIEコンポーネントで同じような機能を実装するには
どうすれば良いのでしょうか?

よろしくお願いします。

26:デフォルトの名無しさん
06/05/15 19:41:35
たぶんリダイレクトするときにイベントが来るからDWebBrowserEvents2を実装してみる。
あくまでもたぶん。

27:12
06/05/15 19:44:44
>>16-24
お返事遅れてすいません。
IActiveScript->AddNamedItemで、スクリプトにCでのコード埋め込みができそうですね。
調べる限り、それをやるにはコードが相当複雑そうですが(^^;
ありがとうございました。

>>25
あっ、>>836だ。

28:デフォルトの名無しさん
06/05/17 18:25:23
なんかIE7βにしてからIEコンポーネント使ったソフトの挙動がヘンなんだが。

29:デフォルトの名無しさん
06/05/17 20:22:50
さすがはM$

30:デフォルトの名無しさん
06/05/17 20:23:33
仕様が変わってるのだから仕様が無い。

31:デフォルトの名無しさん
06/05/17 22:42:57
だれが上手いこと言えとw

32:デフォルトの名無しさん
06/05/18 12:05:04
>>28
IE7b2はデフォルトでローカル(メモリやファイルシステムにある)なhtmlで
アクティブスクリプトを有効にしないようになってるからじゃ○マイカ。

33:デフォルトの名無しさん
06/05/19 02:27:19
>>32
そうだったノカー(AA略)
サンクスコ!

34:デフォルトの名無しさん
06/05/21 14:48:53
>>32
IE6sp2からそうじゃなかった?

35:デフォルトの名無しさん
06/06/01 19:54:50
age

36:デフォルトの名無しさん
06/06/02 00:08:11
IDispatchってなによですぱっちって。なんなのよーこれなんなのよー

37:デフォルトの名無しさん
06/06/02 00:20:11
>>36
同士よー!
IDispatchってなによですぱっちって。なんなのよーこれなんなのよー

なんか、クラスインスタンスをクラスで表しちゃったようなインターフェース。って感じだと思う。

っていうか、俺もIDispatchについて聞きたいんだけどここじゃスレ違い?

38:デフォルトの名無しさん
06/06/02 00:27:50
マルチポストになります。ごめんなさい
はじめVBで探していたのですが、もっと適切なスレがあったので
すいませんが、質問させてください。

サーバと通信するクライアントを作成するのに
WebBrowserControl(Maicrosoft Web Browser)(正しくはTridentらしい)を
利用してやり取りしようとしています。

入力したデータをdoPostで送っているだけなのですが、
サーバ側で見るとdoGetとdoPostの両方で来ています。
漏れの認識では少しのデータを送るときdoGet
大量のデータを送るときdoPostをりようしていると思っています。

なんで、doPostだけで送ってくれないのかわかりません。
WebBrowserControlのAPIとかどこかにないでしょうか教えてください。

後、HttpのdoPost、doGetの違いをわかりやすく詳しく説明しているサイト等を
教えていただけないでしょうか?

39:デフォルトの名無しさん
06/06/02 00:28:27
ここに来るぐらいなら言語の1つぐらい持ってるだろ?
ヘルプみろよ。

40:デフォルトの名無しさん
06/06/12 00:33:54
BHOをいじってます。ブラウザのイベントはInvokeで拾えるんですが
DISPID_AMBIENT_DLCONTROLの拾い方がわかりません。
IWebBrowser2からIOleClientSiteを得ればよいのかな?


41:40
06/06/17 01:33:43
連投すまん。
IEでWordやExcelが開けるんだから、IEもIOleClientSiteを持ってるはずなんだが、
IWebBrowser2からどうやって取得したらよいのかわからない。
IWebBrowser2でQueryInterfaceかましてもNULLだった。

42:デフォルトの名無しさん
06/06/17 02:46:29
VistaのIE7で仕様かわったっぽい?
Navigate2まわりでアクセス違反で落ちるようになった

43:デフォルトの名無しさん
06/06/17 10:16:37
IOleClientSiteはクライアント側(Word, Excel)が持ってるものじゃないの


44:デフォルトの名無しさん
06/06/17 11:21:11
IHTMLDocument2で、任意のタグを取得したい場合(例えばmetaタグとか)、
get_allでIHTMLElementCollectionを取得して、一個一個ループでまわしてタグ名を見ていくしかないのでしょうか?

IHTMLDocument3にgetElementsByTagNameというものがあったのですが、できればIHTMLDocument3は使いたくないです。

45:40
06/06/17 12:45:43
>>43
ActiveDocumentを貼り付けられるものは
IOleClientSiteを持ってると思うんだけど。
Word、Excelも当然もってるし、IEも持ってるはず。
全部ActiveDocumentを開けるから。

46:44
06/06/17 23:31:17
>>44です。get_allしてループでまわすのが面倒だったので質問したのですが、
IHTMLElementCollectionに、itemというメソッドがあって、
タグ名をもとにタグ情報を取得できそうなので解決しそうです。

失礼しました。

47:デフォルトの名無しさん
06/06/24 18:19:48
いつの間にか復活してるじゃないかsage

48:デフォルトの名無しさん
06/06/24 18:48:01
ブラウザイベントをInvokeで拾う方法を教えれ下さい。

49:デフォルトの名無しさん
06/06/24 19:07:05
window.external

50:デフォルトの名無しさん
06/06/24 22:42:56
>>48
DWebBrowserEvents2で色々やってみれ

51:48
06/06/24 22:55:43
>>49-50
実はHtmlイベントの受信がしたかったわけですが、なんとか接続の確立ができ申した、言葉足らずで失礼。
一ヶ月かかったわ…

52:デフォルトの名無しさん
06/06/26 13:55:19
接頭語のIってなんなの?Iって。
IEとかIE_とかにしてくれよ。

53:デフォルトの名無しさん
06/06/26 14:40:42
>>52
InterfaceのIだろ。
MFCなんかでクラス名がCナントカになっているのと同じ。

54:デフォルトの名無しさん
06/06/26 18:23:46
すみません
タブブラウザでソースコードを公開している奴って
ありますか?


55:デフォルトの名無しさん
06/06/26 19:18:45
Donut RAPTなどなど

56:デフォルトの名無しさん
06/06/26 20:15:00
Donut RAPTはHTMLが変に表示される
白抜き文字とかも真っ黒

57:デフォルトの名無しさん
06/06/26 23:10:54
>>51
IWebBrowserNからDWebBrowserEvents2とか使わず、
IDispatch::Invokeでイベント取得できたってことですか?
おしえてホスィ。

DocumentCompleteが通知されてほしい。

58:12
06/06/26 23:18:21
そういえば、IEコンポーネントのJavaScriptからC++の変数を参照する方法ですが、
IHTMLDocumentのget_Scriptで得たIDispatchからQueryInterfaceで、
IDispatchExを取得してInvokeEx呼び出せばいいみたいです。説明わかりにく。

IEコンポーネントからIActiveScriptを得るのはたぶん無理っぽいです。
IDispatchExからプロパティを追加する方法しかないっぽいです。
参考資料 → URLリンク(www.codeproject.com)

これ調べるの結構かかったなぁ

59:デフォルトの名無しさん
06/06/26 23:22:07
IXxxxxx → Interface
CXxxxx → Concrete?またはClass?
DXxxxx → Dってなによ

60:デフォルトの名無しさん
06/06/27 15:42:37
>>59
dispinterface

61:デフォルトの名無しさん
06/06/27 17:40:40
>>59
さすがにコンクリートはないと思うが

62:デフォルトの名無しさん
06/06/27 19:56:47
CreateWindowExで作ったIEコンポのウィンドウを破棄するときはDestroyWindowでOK?

63:59
06/06/27 22:31:58
DIXxxxx → Dual Interfacesらしい
AfxXxxx → MFCのもの

CXxxxxはclassのCっぽいね。

64:デフォルトの名無しさん
06/06/28 21:55:54
>>62
CreateWindowExってことはATLのIEコンポ?
よく調べてないけどDestroyWindowでおk(適当

65:デフォルトの名無しさん
06/06/29 16:44:23
はげ

66:51
06/06/30 05:45:25
>>57
Htmlイベントじゃなくて、マウスイベントとかだったわ…重ね重ね失礼。

67:57
06/06/30 13:15:49
>>66
いや、俺がよく見てなかったのが悪かったわ。
>実はHtmlイベントの受信がしたかったわけですが、
と書いてあるのを思いっきり見落としてた。

68:デフォルトの名無しさん
06/07/02 01:38:07
HTAアプリケーションのselection=noみたいに、
IEコンポーネント内のテキストをマウスカーソルで
選択できなくするような方法をご存知ないでしょうか?

69:デフォルトの名無しさん
06/07/03 03:51:40
そういうJavaスクリプトを読ませる。
URLリンク(www.iwate-np.co.jp)

70:デフォルトの名無しさん
06/07/03 10:32:53
>>69
オオオおおお。まさにやりたいことです。ありがとうございます。
document.onmousedown = new Function("return false");
↑これやったらボタンも押せなくなるのかと思ってましたけどできるんですね

71:デフォルトの名無しさん
06/07/05 14:24:56
window.moveToやwindow.resizeToが呼び出されたことを知る方法ないでしょうか?
DWebBrowserEvents2とか見ましたが見当たりませんでした…。

72:デフォルトの名無しさん
06/07/07 19:08:31
マウスポインタの下にリンクがあった場合、
そのリンクのIHTMLAnchorElementを取得するにはどうすればいいすか?

73:デフォルトの名無しさん
06/07/10 12:06:11
禿

74:デフォルトの名無しさん
06/07/14 00:23:42
すみません

IEコンポーネントでIHTMLDOMNodeを使おうとしたのですが
error C2065: 'IHTMLDOMNode' : undeclared identifier
と定義不明といわれて怒られます。

MSDNを見る限り、Mshtml.hをインクルードし
IE5以上なら使えると書いてあります。
なぜ私の所ではダメなのでしょうか?

Windows2000SP6+VisualStudio6.0+IE6です。
よろしくお願いいたします。


75:デフォルトの名無しさん
06/07/14 11:39:39
VS6.0だと古くてヘッダに定義がないのかも。
実際に俺の環境ではVS.NET2003とVS6.0を入れてるけど、6.0にはIHTMLDOMNodeのクラス定義がないね。
VS6.0の最新のサービスパック入れたらなおるか、.NET買うかしないと。

76:デフォルトの名無しさん
06/07/14 20:42:38
すみません。妥当なスレが分らなかったのでここで質問させてください。

IE7の日本語ベータ3をインストールしたら、InternetOpenUrlにシフトJIS
のファイル名を使っているプログラムがエラーを起こすようになりました。

β版だからといえばそれまでですが、何か情報を持ちの方、または
対処方法、ご存知であればお教えください。

補足として、

・IE6以前とIE7ベータの英語版では問題なかった。
・IE7日本語β3からアドレスバーにS-JIS日本語名を含むURLを直接入れた場合は読み出せる。
・InternetOpenUrlでエラーが起きたとき、サーバーのログを見ると、日本語に該当する部分が
 著しく欠損した状態(文字化けとか言うレベルじゃなく)でアクセスされている模様…。

よろしくお願い致します。(日本語のUrlを使うなというのは横へ置いておいて…)


77:デフォルトの名無しさん
06/07/14 21:06:10
正式版になってから言え

78:デフォルトの名無しさん
06/07/14 21:49:35
>>76
InternetOpenUrlWだとどうなる?

79:76
06/07/14 22:19:03
>>78
プログラムがANSIなのでW版はちょっと試していませんが、
ひとまず自分でURLの漢字部分をutf8エンコードして回避しました。

どうもありがとうございました。


80:74
06/07/14 22:33:46
>75
.NETではIHTMLDOMNodeは使えるみたいですね。
あとVS6.0のSP6をインストールしてみましたが使えませんでした。
やはり.NETを買うしかないみたいですね。
ありがとうございました

81:76
06/07/14 22:33:46
>>78
W版を試してみたところ、InternetOpenUrlWだと何も考えなく
てもうまく行きました。

自分で%E7……て変換しなくてもやってくれるようです。

重ねてありがとうございました。

……自分で変換したさっきの苦労はorz

82:デフォルトの名無しさん
06/07/14 22:56:21
別ドメインのフレームのIHTMLDocument2を取得するにはどうすればよいでしょうか

83:デフォルトの名無しさん
06/07/15 21:25:02
質問です。
XMLデータをメモリから設定すると、HTMLとして表示されてしまうのですが、
設定するデータの属性を設定する方法があるのでしょうか?
現在は、一度「.xml」な一時ファイルを吐き出してそれを読み込ませる方法にしています。


84:デフォルトの名無しさん
06/07/15 22:33:11
ちゅんと doctype 付けてる?


85:83
06/07/16 05:13:09
>>84
つけていませんでした。DOCTYPE見ているのですか。
試してみます。どうもです。


86:デフォルトの名無しさん
06/07/18 03:06:57
前スレででていたUrlMkSetSessionOptionを使って
ユーザエージェントを変更したいのですが、変更されません。
設定するタイミングがあるのかと、いろんな箇所で入れて、
UrlMkGetSessionOptionで取得すると取得される値では変更はされているようでしたが
printenv.cgiなどでみると変更されていません。
分かる方いますでしょうか?


87:86
06/07/18 03:12:59
navigator.userAgentが変更されていました。
UrlMkSetSessionOptionは、Javascriptのnavigator.userAgentを変更する関数で、
HTTPプロトコル上のUser-Agentヘッダーオプションは変更しない・・?


88:デフォルトの名無しさん
06/07/18 04:43:57
確認君とかで見ると普通に変更されるよ。

89:86
06/07/18 05:21:24
>>88
確認君でも見ましたが、変更されていませんでしたが・・・。IE7 XPPro SP2です。
お詳しいようなので、いまさらな質問ですが、
UrlMkSessionOptionは、プログラム内で一度実行したらそれでいいのでしょうか?
実行するタイミング(たとえば、コンポーネントを起動後など)などありますか?


90:デフォルトの名無しさん
06/07/18 14:03:25
IEコンポーネントを作った後にUrlMkSessionOptionしてるだけだよ。IE6+XPPro
ただ、こっちはなぜか実行時1回こっきりしか変えられないんだよなぁ・・・。


91:デフォルトの名無しさん
06/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();

とかしても、ステータス判定のところで無限ループが発生してしまい、お手上げです。
どなたか、ご教示ください・・・。


92:デフォルトの名無しさん
06/07/21 11:48:53
その nextProcess() をしない場合どうなるの?


93:デフォルトの名無しさん
06/07/21 20:36:20
IEコンポーネントでとあるHPを表示させているのですが、
そのHPの中でFocus()をしていて、そのHPをプログラム側で読み込むと
表示しているアプリを前面に持っていってしまいます。
(何回もそのHPを更新をするのでその都度前面に来るとかなり鬱陶しいです。)

何とかこれを回避したいのですが何か良い方法はありませんでしょうか?
Win2000+VC6.0+IE6です。よろしくお願いいたします。


94:デフォルトの名無しさん
06/07/23 07:46:18
>72
IHTMLDocument2::elementFromPoint

95:デフォルトの名無しさん
06/07/23 20:58:42
IWebBrowser.Navigate2(..)の第一引数にマイコンピュータとかのCLSID
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
を文字列で渡す場合、

IE6(XP sp2) だと正常に動作するのに、IE7(Vista β2)だと
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました……」
ってエラーがでるんですが
なんとかなりませんかね?

96:デフォルトの名無しさん
06/07/24 00:17:00
質問です。
.zipファイル等のリンクをクリックしてダウンロードする際の保存先のパスや、
ファイル名指定ダイアログでキャンセルした等の情報は取れないんでしょうか?


97:デフォルトの名無しさん
06/07/24 23:59:32
JavaScriptを実行する方法はありませんか?
DocumentComplete時に初期設定JavaScriptを実行するようにしたいのです。

>>93
荒業で以下のJavaScriptを実行する手もある。
window.focus = function(){ return false; }

98:97
06/07/25 00:00:34
質問なのにsageちゃった。せっかくだからage

99:デフォルトの名無しさん
06/07/25 01:09:45
HtmlElementCollection links = webBrowser1.Document.Links;
foreach (HtmlElement link in links)
とかやってるのですが、linkのなかに含まれる
URLだけを拾うにはどうしたらいいでしょうか?
環境は.net2です。


100:デフォルトの名無しさん
06/07/25 04:44:03
IHTMLAnchorElement
get_href

101:デフォルトの名無しさん
06/07/25 14:17:33
>>97
>>58のリンク先に載ってる。
だけどVC.NET2003だとサンプル動かないし、COMよくわからないから死にそう。

102:97=58
06/07/25 15:14:55
>>101
>>58は俺です(笑。 >>58はJavaScriptのロジックと、C++のロジックを結びつける方法ですね。
>>97の質問は自作IEコンポでどんなページを開いても、開いた最初にinit.jsなどの初期設定JavaScriptを実行したいのです。

>だけどVC.NET2003だとサンプル動かないし、COMよくわからないから死にそう。
サンプル動かなかった?コンパイルは通るけど、なんか赤ばってんのダイアログがでる、
っていう問題だったらキャンセルだか無視ボタンだかを押し続けたら動いたような気がしたけど。
まあ、サンプル動いてもあのソースめちゃくちゃ長いし複雑だったから解析大変だけどね。
JavaScriptのロジックにC++のロジックを埋め込む方法が知りたいのなら軽く解説しますよ。
>>58のリンク先にあるイベントを埋め込む方法は最終的にはわからなかったけど。

103:97
06/07/25 15:25:15
と思ったら簡単に見つかりました。
IHTMLWindow2のexecScript使えばいいのね…。

URLリンク(msdn.microsoft.com)
URLリンク(www.ultrasync.net)

104:99
06/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
06/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
06/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
06/07/26 23:19:26
>>105
の前にwindow.focus = function(){ return false; } で要求した動作を満たしてる?
window.focus()メソッドが完全に無効になっちゃうけど、それでもかまわないの?

108:デフォルトの名無しさん
06/07/27 23:19:27
質問です
やりたい事:Webアプリケーションを自動で操作するスタンドアローンアプリを作りたい

1 フレームがある場合どうすればよい?
2 別ウインドウが開く場合どうする?
3 画面遷移完了はどのイベントを受信することで判る?
4 操作アプリ起動時に、既に開いているIEオブジェクトを取得して操作できる?

よろしくです

109:93
06/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
06/07/28 00:18:29
>>109
再表示した時にもう一度execScript実行してる?
ドキュメントを再読み込みしたら、window.focusの中身はまた元々のfocusメソッドに戻ってると思うよ。
DIID_DWebBrowserEvents2のDownloadCompleteイベントを監視して毎回、window.focus無効にしないと駄目だぜよ。
(DocumentCompleteは再読み込みでは発生しないのでDownloadCompleteイベントがいいです)

111:93
06/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
06/07/29 00:38:29
>>1
>ちょっと思ったのですが、focusはDownload中にScriptとして読み込まれ、
>実行されるわけですよね?だからDownloadComplete時にfocusを無効にしても遅いような気がしてきました。
まぢですか。と思ってやってみたら本当ですね。
私は標準で用意されてるwindowクラスのmoveToやらmoveByなどのメソッド書き換えて、
別の動作にさせたいという要求があったのですが同じ理由で無理そう。

そうなるとちょっと良い方法はわかりません。困りましたw

113:デフォルトの名無しさん
06/07/31 01:24:46
今まで表示済みのページに対してJavascriptを適用するのに
わざわざDocumentのwriteで書き直しを行っていたのですが、
execScriptなんてのがあったのですね。
大変参考になりました、ありがとうございます。>>103


ちなみに、BSTR型は、ただのワイド文字列とは違うので(先頭が文字列長になっています)
CComBSTR等で包んであげると良いです。

execScript(CComBSTR("window.focus = function(){ return false; }"),CComBSTR("JavaScript"),NULL);


114:デフォルトの名無しさん
06/08/02 01:30:29
Visual C++で、WebBrowserコントロールを使ってブラウザのようなアプリケーションを作成しています。

作成しようとしているものは、既存のクリック募金のサイトにアクセスして、クリック回数や募金の金額を管理してくれる簡単なアプリです。

対象とするサイトは以下のようなサイトです。

URLリンク(www.kirin.co.jp)
URLリンク(clickbokin.ekokoro.jp)
URLリンク(www.thehungersite.com)

クリック時に、WebBrowserコントロールのOnBeforeNavigate2()が呼ばれるサイト
では、OnBeforeNavigate2()でフックする方法が使えると思います。
ただ、一番上のキリンのサイトのようにFlashで書かれたサイトでは、クリック時に
OnBeforeNavigate2()が呼び出されないようで、クリックを検出する方法を
どのようにしたら良いかと悩んでします。

なんか、良いアイディアあるでしょうか?
WebBrowserも、HTMLも、Visual C++も、Flashも詳しくないのでどこからてを付けてよいか困っています。
よろしくお願いします。



115:デフォルトの名無しさん
06/08/02 17:26:00
自分がクリック(に相当する操作)した回数を数えるんだろ?

116:デフォルトの名無しさん
06/08/03 00:32:09
>114
NavigateComplete2イベントなんてどうでしょう?

以下のサイトにDWebBrowserEvents2のイベント説明が載ってるのでいろいろ試してみては?
URLリンク(msdn.microsoft.com)

117:114
06/08/04 00:53:49
> 116さん

詳しい説明ありがとうございました。
NavigateComplete2も試してみたんですが、クリックした際に呼ばれないようです。

まだ、理解できていないですが、以下の方法で少しチャレンジしてみようと思います。

相談にのっていただいてありがとうございました。

1)Ethrealでパケットキャプチャして調べたところ、通信をしているのでWebBrowserコントロールで
通信しているパケットを取得して判断。

2)下の方法でクリックのイベントが取れるそうなので、そこからがんばる。

URLリンク(support.microsoft.com)


118:デフォルトの名無しさん
06/08/04 17:43:06
指定したリンクが未読か既読か区別する方法ってありますか?
IHTMLAnchorElementではそのようなメソッドがないようです。。。

119:デフォルトの名無しさん
06/08/04 21:08:39
>>118
IUrlHistoryStg::QueryUrl

120:デフォルトの名無しさん
06/08/10 11:11:27
BCC(無料)でIEコンポーネントを使いたいのですが
どこか参考になるサイト等はありますか?

121:デフォルトの名無しさん
06/08/10 13:29:45
教えない><

122:デフォルトの名無しさん
06/08/10 16:24:39
マジレス
BCCでは使えない
VC++にしなさい

123:デフォルトの名無しさん
06/08/10 16:43:24
無理

124:デフォルトの名無しさん
06/08/10 17:41:48
Visual C++ 2005 Express Edition は?

125:デフォルトの名無しさん
06/08/11 10:11:58
BCCでは無理なようですね
ありがとうございました

126:デフォルトの名無しさん
06/08/11 10:15:09
>>125
たぶんこの方法ならできると思う。VC++固有の機能は使っていないはず。
URLリンク(www.adp-gmbh.ch)
ATLのDLLを用意できるのなら、このページの方法が使える。
ただしCComPtr/CComQIPtrなどを使わないように改造する必要があるだろうが。
URLリンク(www.nitoyon.com)

127:デフォルトの名無しさん
06/08/12 11:58:06
>>126
すごいね。この上のHP。mingwでもできるようだ。BCCでもできるっしょ。
URLリンク(www.adp-gmbh.ch)

128:デフォルトの名無しさん
06/08/20 19:17:37
ページを更新した(更新ボタンを押す or F5を押す)
というイベントはどう拾えばよいのでしょう?

129:デフォルトの名無しさん
06/08/21 00:17:13
IEツールバーの製作もここですか?

ツールバー上の特定のボタンを押すとポップアップメニューが出てくるように
プログラムしたのですが、IEを複数起動した場合、2つ目以降では
メニューが出てきません。他にも、IEを複数起動した場合、不安定に
なることが多いです。これって何が原因でしょうか。

IEを複数起動すると、ツールバーも複数存在するわけですが
OSの内部ではどうやって各ツールバーを扱っているのでしょうか。

130:デフォルトの名無しさん
06/08/21 00:35:46
>>128
更新ボタンって自分で作ってないの?
F5はキー拾えばいいんじゃね?

>>129
>IEを複数起動すると、ツールバーも複数存在するわけですが
>OSの内部ではどうやって各ツールバーを扱っているのでしょうか。

IEが別プロセスならツールバー間も無関係なはず
別プロセスでも共有しちゃってるような何かリソースがあるんじゃないの
設定ファイルとかレジストリの状態とか

131:128
06/08/21 00:45:50
>>130
説明不足でした。
自分でIEコンポのインスタンス生成してるんじゃなくBHOをやってます。
なのでInternetExplorerで更新されたことが知りたいんです。
更新だとBeforeNavigateはこないです。

132:デフォルトの名無しさん
06/08/21 02:11:02
>>131
BHOってのがなんだか知らんが、
DownloadBeginかDownloadCompleteだったら、
location.reload()とかで更新されるたびに毎回通知がきたよ。

133:デフォルトの名無しさん
06/08/21 18:43:50
>>129
複数のスレッドから呼ばれてもきちんと動作するように作る。

134:デフォルトの名無しさん
06/08/23 01:59:13
ねーねー、おまいら IE6 と IE7 の違いはどう吸収すんの?

135:七資産
06/08/23 02:50:30
気合

136:デフォルトの名無しさん
06/08/23 02:53:57
今のところ、Navigateに空文字渡すとエラーが出るようになったくらいしか
IE7と6の違いには遭遇してないけど、他にもいろいろあるんだろうな。

137:デフォルトの名無しさん
06/08/23 07:34:41
多段タブにできないものかな。

138:デフォルトの名無しさん
06/08/23 10:42:28
>>135
第二次世界大戦はそれで惨敗した。

139:デフォルトの名無しさん
06/08/23 12:18:31
戦後の復興も気合いだということを忘れなく。

140:デフォルトの名無しさん
06/08/23 15:24:43
>>139
気合はもちろん必要だが、気合だけでは無理、ということをお忘れなく。

141:139
06/08/23 23:32:10
プログラムは気合いと才能。

142:七資産
06/08/24 03:40:09
そして徹夜

143:デフォルトの名無しさん
06/08/24 13:24:33
閃き、発想・・・まぁ才能の一部だなぁ

144:139
06/08/24 14:43:03
昼寝して目覚める数分前の夢の中に半分いる状態で、
悩んでいるロジックについて考えると答えが出たりする。
この閃きは、神から授かった才能。

145:デフォルトの名無しさん
06/08/24 14:49:07
はいよかったね。
でもここはここはIEコンポーネントを使い倒すスレだよ。

146:デフォルトの名無しさん
06/08/27 19:01:35
IDispatchは大体理解したのですが、IDispatchExっていうのはなんなんですか?なんなの?なんなのよー!?
マイクロコロヌ

>>144
それは、うまく右脳を使える時間帯だな。ハイヤーセルフ(高次元の自分)と呼ばれる奴だ。
今、悩んでいる出来事を書いたメモを枕元において寝るとハイヤーセルフが寝ている間に解決してくれるという。
経営者とかが良くやる手法だとか。人間誰しも持ってる能力だ。

独学で使いこなしているのであれば、なかなか評価できるが。

147:デフォルトの名無しさん
06/08/28 08:27:51
IEコンポを生成したスレッドとは別のスレッドから、
IHTMLDocument2::write呼び出したら、まずいかな?
Mutexはったら大丈夫かな?

148:デフォルトの名無しさん
06/08/28 09:02:21
スレリンク(tech板:102番)
とかかも

149:147
06/08/28 11:53:33
つーか実際に呼んだら死んだよ・・・
む~今までおぼろげな理解で済ませてきたが、
Apartmentとかも勉強せねばならんな。
確かに、そっちのスレッドのがよさげ。

150:デフォルトの名無しさん
06/09/09 18:32:57
上の方で誰か質問してたけど
結局Reloadを検知するのってどうやんの? 生IEなんだけど。

BeforeNavigate2 はFireされないし
wm_commandだとメニューやF5は取れるけど、
更新ボタン押されても分からないよママン


151:デフォルトの名無しさん
06/09/09 21:16:01
安全な方法では無理


152:デフォルトの名無しさん
06/09/10 11:52:41
既成のタブブラウザがあるのですが、
これのaxwebbrowserのプロパティを外からいじる方法ってあるんでしょうか?



153:デフォルトの名無しさん
06/09/16 09:36:17
誰か答えてやれよ

154:デフォルトの名無しさん
06/09/16 09:43:59
漏れの男汁を飲み干したら答えてやろう。


155:デフォルトの名無しさん
06/09/16 10:03:02
>>152
タブブラウザの実装による。
COMのインタフェースとして取得できるなら望みはあるけど。
普通はそこまでしてないだろうな。

156:デフォルトの名無しさん
06/09/16 16:41:08
タブブラウザ側でAPIぐらい用意してるだろ普通。


157:デフォルトの名無しさん
06/09/16 17:57:00
janeのソース見る限り、外から使える仕組みになってるようには見えないぞw

158:デフォルトの名無しさん
06/09/17 02:46:28
どこのJaneがタブブラウザかと

159:デフォルトの名無しさん
06/09/17 13:59:17
すまん。間違えた。ぷにるはSDK公開されたら取得できるかもね

160:128
06/09/21 00:37:35
>>150
なんか別件で調べてたら偶然みつけた
VK_BROWSER_REFRESH
とかいうvirtual keyがあるらしい。XP/2000のみ有効らしいが。

161:152
06/09/23 23:02:35
レスありがとうございます。
とてもマイナーな洋物タブブラウザなので無理そうですね…
スクリプトエラーの警告がうざすぎるので消したかったのですが諦めます。

162:デフォルトの名無しさん
06/10/29 18:23:48
IEコンポから呼ばれるイベントは、プログラムのメインスレッドとは違い
IEコンポが自分で作ったスレッド上で実行されるんですよね?
なのでそのイベント上ではメインスレッドと処理がぶつからないようにすべきなんでしょうか?

163:デフォルトの名無しさん
06/10/29 18:41:04
IEの設定でJavaScriptをOFFにしても、自作プログラムに貼り付けたら普通にJavaScriptが実行された……

164:デフォルトの名無しさん
06/10/29 19:47:13
>>163
自作プログラムの中は舞いコンピュータゾーン扱いされるのでは?
俺の想像だが。

165:デフォルトの名無しさん
06/10/29 20:12:04
なんかのインターフェースで制限つきサイト扱いにできるよ。
OEが使ってるのもそれ

166:デフォルトの名無しさん
06/11/22 17:06:05
IE7ベータのときに日本語を含んだURLのInternetOpenUrlが

A版 NG
W版 OK

だったのが、

A版 OK
W版 NG

に変わってる(IE6ではどっちもOKだった)

MSがもはや何をしたいのか分らん。A版戻したってことは
日本語URL何が何でも排除って方針でもないようだが…。

もう自分で変換することにしたよ(´・ω・`)


167:デフォルトの名無しさん
06/11/22 17:07:07
A版 OK
W版 NG
ってのは正式版ではってこと

168:デフォルトの名無しさん
06/11/24 13:30:42
>>116
LPWSTR で非 ASCII 文字を含む URL を渡したとき、どういう動作をしてほしいの?
UTF-8でエンコードしてURLEscape?
漏れには何を持って「OK」「NG」とするのかもわからない。

169:デフォルトの名無しさん
06/11/25 10:31:20
>>168
166だけど俺に対して書いたんだよね。

>漏れには何を持って「OK」「NG」とするのかもわからない。
内部動作的な詳細は知らないが、IE6状態で動いてたものが
IE7を入れると動作が変わるのがNG。

>UTF-8でエンコードして
たぶんこれでOKなんだろうが、上に書いたとおりInternetOpenUrl
の内部動作の実際は知らないので、「互換性を保ってくれ」というの
が要望。

非 ASCII 文字を含む URLを使うなという話もあるかもしれないが、
プログラムのユーザーが何を入れるかは分らないからどうしようも
ない。

170:デフォルトの名無しさん
06/11/25 14:55:35
> に変わってる(IE6ではどっちもOKだった)
IE6の動作が基準だったらこれはトートロジーで書く意味ないじゃん。
IE6がバグっててIE7でバグが修正されただけかもしれないのに。
どうせバグでもいいから動作変えるなと言うんだろうけど
まあIEコンポはSide-by-Sideでないから一理はあるな

171:デフォルトの名無しさん
06/11/25 15:57:46
>IE7でバグが修正されただけかも

A版とW版って文字コード以外動作同じだと思ってたんだけど
そうじゃない場合もあるのか?

文字コードの変換(A←→W)はAPI使ってる。

IE7で『バグが修正されて』どっちも駄目になるなら
まだ整合性も有るように感じるけどね。

>> に変わってる(IE6ではどっちもOKだった)
>IE6の動作が基準だったらこれはトートロジーで書く意味ないじゃん。
そう? 166を書いた段階での参考情報として付加したまで。


172:デフォルトの名無しさん
06/11/25 16:54:53
案外、インターネットオプションの「常にURLをUTF-8で送信する」がオフになっているだけというオチはない?

173:デフォルトの名無しさん
06/11/25 18:25:22
>>172
>URLをUTF-8で送信
言われて、それらしきオプション、ONOFFどちらも試してみた。
けど変わらなかった。そういう問題でも無いみたい。

A版ならチェックがOFFでも日本語URL開ける。

174:デフォルトの名無しさん
06/12/05 14:43:35
VB2005ではMSChartってインストールされないんでしょうか?

もしそうなら、代わりの機能とかどうにかしてMSChartを使うこととかできませんか?


175:174
06/12/05 19:15:17
VB.NETスレと間違えました。
向こうで質問しなおしてきます。

失礼しました。


176:デフォルトの名無しさん
06/12/06 06:12:27
表示したページのWidthやHeightを調べて、スクロールバーが出ないように
Windowのサイズを変更したいのですが、WidthやHeightがわかりません。

どのように調べればよいですか?



177:デフォルトの名無しさん
06/12/10 00:28:13
IHTMLDocument2か何かで取れないっけか

178:デフォルトの名無しさん
06/12/10 04:02:54
取れないよ。自動でレンダリングするからWidth,Heighなんて取っても意味ないんじゃないのかね?

179:デフォルトの名無しさん
06/12/10 11:38:52
>>176
ここはどうすんの?
URLリンク(worlds-highest-website.com)

180:デフォルトの名無しさん
06/12/10 11:51:36
調べたらIWebBrowser2で取ることは出来るっぽいが、>>178の通りかも知れぬ

181:デフォルトの名無しさん
06/12/21 01:20:17
シェルをC#でいじくってるんですが、
BeforeNavigate2の段階で、
移動しようとしてるフォルダのpIDL取得する方法はないですか?
URLじゃなくて。
NavigateCompleteすればShellGetPathで取れるんですが

182:124
06/12/26 01:21:39
お。こんなスレ出来てたのか・・・
では早速。
Internet Explorer_Hiddenウィンドウの役割と
IEのウィンドウで使われる独自メッセージについて調べているのですが、
うまく探せません。
いい情報を見かけた方、お教え下さい。


183:182
06/12/26 02:33:11

124は間違い

184:デフォルトの名無しさん
07/01/08 19:04:39
BeforeNavigate2でPOSTDATA横取りしたいんだけど、ファイルアップロードのタグが
あるときにデータが途中で切れちゃうよママン。
まーPostData中に(っていうかアップロードしたファイル中に)NULLが入ってるんだろうけど
正確なPostDataのlengthって取れないのかな?

185:デフォルトの名無しさん
07/01/08 19:47:02
>184
自己解決、というか、KnownBUGだったよ。
URLリンク(support.microsoft.com)
GET/POSTのデータ横取用プロキシ作って組み込むか。

186:デフォルトの名無しさん
07/01/08 22:32:30
IE7だと解決してるのかねぇ

187:デフォルトの名無しさん
07/01/10 20:07:45
今のさっきまでこのスレ過去スレと思ってた現役だったんですね
よろしくオナガイシマス
static CComQIPtr< IWebBrowser2 > pWB2;
こんな書き方良く見かけるのですがこれはpWB2にIWebBrowser2のポインタを
設定すると考えてよろしか?
COMコンポ全然わかんないんでスマソ

188:デフォルトの名無しさん
07/01/10 20:08:35
スマソあげてもうた

189:デフォルトの名無しさん
07/01/10 21:35:02
Template

190:デフォルトの名無しさん
07/01/10 21:42:23
ATL

191:デフォルトの名無しさん
07/01/10 22:29:33
187です
VS2005なのですが、コンパイラの設定でATLを使用するに設定しないとだめ?
それでpWB2の値の意味は何なの?けっきょく

192:デフォルトの名無しさん
07/01/10 22:56:31
>>191
CComQIPtr< IWebBrowser2 > 型の変数を宣言しただけで、値は設定していない。
C++の基本とVC のCOM向け拡張の両方とが解っていないと、
C++でCOMやるのは難しいと思う。

193:デフォルトの名無しさん
07/01/10 23:34:43
>>192サンクス
COMとかなるべく関わりたくなかったんだけど、やらなきゃいけない羽目になって
苦しんでいます、pWB2の型は何型になるのでしょうか?


194:デフォルトの名無しさん
07/01/10 23:57:13
スマートポインタの概念を理解すべし。auto_ptrでぐぐると良い。
CComPtrも基本はauto_ptrと同じだ。要するに解放忘れを防ぐための仕組み。

195:デフォルトの名無しさん
07/01/11 00:09:06
>>193
pWB2の型はCComQIPtr< IWebBrowser2 >型と何度も(r

196:デフォルトの名無しさん
07/01/12 01:25:36
IEコンポーネントを使っても、
開いてるページに埋まってるFrameの中を見ることは出来ないんですか?


197:デフォルトの名無しさん
07/01/12 01:37:57
セキュリティに関わるからね


198:デフォルトの名無しさん
07/01/12 02:02:29
やっぱりそうですか。
ありがとうございました。


199:デフォルトの名無しさん
07/01/12 11:54:54
C#でWebBrowserControl経由で使ってると、
IEというかInternet Optionでの設定は反映されるんですが、
独自のProxy指定は出来ないのですか?


200:デフォルトの名無しさん
07/01/16 13:47:20
C#でSHDocVw.dll参照に追加してWebBrowserClass使うとき、
32bit環境だとHWNDプロパティがInt32で返ってくるんだけど、
これって64bitだとどうなってるの?
IntPtrで返ってくる? それともInt64?

201:デフォルトの名無しさん
07/01/21 09:06:26
なんかこんなの見つけた。
URLリンク(www.hannan-u.ac.jp)

今時の卒論ってこんな程度なの?

202:デフォルトの名無しさん
07/01/21 09:11:01
学校によるんじゃない?


203:デフォルトの名無しさん
07/01/21 11:50:20
卒論wardファイルw

204:デフォルトの名無しさん
07/01/21 11:53:39
スクリーンショットがDonut RAPTっぽく見えるんだが

205:デフォルトの名無しさん
07/01/21 15:01:08
読んでしまった
しかしながら現状としては①②③個々のプログラムの方向性は出来上がってきたものの、
個々を関連付けるプログラムの作成には至っておらず、前述されている「タブブラウザ」への
組み込み、動作テスト等もまだ出来ていない状態である。最終的には独立したプログラムと
して完成させ、デスクトップ上で起動できる状態を目指していく状態にある。

何もしてねーwwwwww

206:デフォルトの名無しさん
07/01/22 00:14:04
PCに縁遠い年寄り教授をだまくらかすにはこれで十分なんだろ

207:デフォルトの名無しさん
07/01/22 00:27:18
とってもw ard!

既に社会人で業務としての資料作りも慣れてる俺が言うのもなんだが、
内緒だけどあの程度プレゼン資料なら、前日の夕方から慌てて徹夜でデッチあげたりしてる。


208:デフォルトの名無しさん
07/01/22 00:40:35
>>207
そうやってでっち上げたんじゃないのw

209:デフォルトの名無しさん
07/01/22 00:41:28
そんな卒論って・・・・・



まぁありかなw

210:デフォルトの名無しさん
07/01/22 00:50:16
大学がアレなの?
それとも学部がヲイなのか?
当然ゼミはヌルポなんだけど、学生はもっとガッされるべき。

211:デフォルトの名無しさん
07/01/22 01:39:03
阪南大学だってさ。
どこか分からん。国立じゃなさそうだ

212:デフォルトの名無しさん
07/01/22 01:41:46
4年も大学で学んであの程度ですか、そうですか。


213:デフォルトの名無しさん
07/01/22 02:13:40
今日からここは自分の卒論を晒すスレになりました

最初のかたどうぞ



214:デフォルトの名無しさん
07/01/22 02:56:21
freenetみたいだけど2chネラー向きのファイル共有ソフトの提案

215:デフォルトの名無しさん
07/01/22 04:17:50
タイーホw

216:デフォルトの名無しさん
07/01/22 04:19:11
IEコンポーネントの使い方をやさしく指導してくれるサイトや本ってあります?

217:デフォルトの名無しさん
07/01/22 08:23:35
以下のテンプレに従って質問してください。

【性別】 男/女
【年齢】 実年齢
【居住地】 現在住んでいる所を行政区程度まで
【職業】 ありのままに
【身長】 cm表記で
【体重】 kg表記で正直に
【スリーサイズ】 バスト・ウエスト・ヒップをcm表記で。
【画像URL】 全身ならびに顔写真を100万画素クラスで。
【メールアドレス】 携帯電話もしくは、プロバイダ等のアドレスを。


218:デフォルトの名無しさん
07/01/23 08:01:54
相当偏差値低いらしい阪南大学。
学生の質が垣間見えた。

219:デフォルトの名無しさん
07/01/25 02:20:31
はいはい、次の卒論どうぞ。

220:デフォルトの名無しさん
07/01/25 18:55:29
IHTMLWindow2::execScript で外部からjavascriptを実行できることは
わかったのですが、オブジェクト型を引数にとるjavascript関数に
引数を渡して実行することは不可能なのでしょうか
(例えばVCから IUnknown* の情報を渡したいとか)。

221:デフォルトの名無しさん
07/01/26 20:40:08
>>199
今更だけどなんか見つけたよ。
URLリンク(isawseashell.blogspot.com)


222:デフォルトの名無しさん
07/01/27 02:14:46
>>199
私も>>221のリンク先とと同じくUrlMkSetSessionOptionに
INTERNET_OPTION_PROXYを渡して実現してた。
問題なく動作するはず。

223:デフォルトの名無しさん
07/01/27 20:53:20
System.Windows.Forms.Webbrowser
を使ってる者ですが、
これを使って表示している場所から、別のリンク先をクリックした際に、
何を送信しているか補足する場所ってありますでしょうか?

Navigatingメソッドでは何もつかめなさそうですし。

画面上のHTMLソースだけではなく、HTMLヘッダーだけではなく、ファイルに書き出していない
メモリ上のクッキーの値もみたいのですが
知ってる方、よろしくお願いします。

環境
XP64 VS2005 C#



224:デフォルトの名無しさん
07/02/02 22:55:44
すみません javaScriptでIEコンポ内の
ページを閉じるのを感知したいのですが
なにか方法あります?

225:デフォルトの名無しさん
07/02/02 23:03:59
フォースを使え

226:デフォルトの名無しさん
07/02/08 19:13:13
htmlをブラウザに表示する前段階でhtmlを改変したいんです。
イメージとしてはプロキシサーバとかポップアップブロックみたいな感じ。
つまり間に一つ噛ましたいわけです。
どうしたらいいか教えてください。環境VC++

227:デフォルトの名無しさん
07/02/08 19:30:14
>>226
Proxyを間に入れれば?


228:デフォルトの名無しさん
07/02/08 20:01:07
>>227
そうしてみます。どうもでした。

229:デフォルトの名無しさん
07/02/08 21:38:06
自プロセス・別スレッドでProxyって感じの実装を今試してるよ。
C#だけど。


230:デフォルトの名無しさん
07/02/08 23:02:14
WebBrowserClassとかHTMLDocumentClassとかで
IEの表示文字サイズがなんになってるかとか 調べられないかな・・
どうやったら 調べられるか誰か教えてくれ・・・・


231:デフォルトの名無しさん
07/02/08 23:15:05
>>230
いわゆる最大~最小の文字サイズ?
それは初歩だと思うけど、「ExecWB OLECMDID_ZOOM」辺りでググれ。

232:デフォルトの名無しさん
07/02/09 01:14:24
人の卒論って面白いね^^

233:デフォルトの名無しさん
07/02/16 14:31:51
>>232
面白いってか、あれって卒論ってレベルじゃねーぞ。
なんか講義一回分の資料って感じじゃね?
街のパソコン教室って感じで、大学でやられても困るけど。

234:デフォルトの名無しさん
07/02/21 14:05:15
スクリプトエラーのダイアログを非表示にしたいのですが、

Sleipnirのこれ
URLリンク(www.sleipnir-wiki.jp)
はどういう実装になっているのでしょうか?

235:デフォルトの名無しさん
07/02/21 19:36:43
IOleCommandTarget::ExecでOLECMDID_SHOWSCRIPTERRORを握りつぶす

Sleipnirの実装は知らんが、DonutRAPTのソースを落としてきて
AtlhostEx.h,ScriptErrorCommandTargetImpl.h,DialogKiller.h辺りを眺めてみればいいと思う。
対象言語がC++以外の場合は知らん。

236:234
07/02/21 21:27:42
>>235
今からダウンしてくる。
thx!


237:デフォルトの名無しさん
07/03/15 18:12:34
IEオブジェクトを使用しあるページを表示し、
ボタンを押して、次のページに移動するプログラムを書いております。
dim wbrowser as object
Set wBrowser = CreateObject("InternetExplorer.Application")

wBrowser.all.Item(11).Click

ここで、
メッセージボックスが表示され「はい・キャンセル」を選択しなければなりません

エンターをSendkeysでよいのですが

sendkeys "{Enter}"
と記載しても、その前にIEオブジェクトに制御が移動するようで、できません

何方か解決策がありましたらお教え下しさい


238:デフォルトの名無しさん
07/03/17 06:03:52
プロセスもういっこ作ってそこで制御

239:237
07/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

240:IE7入手先
07/03/17 16:46:25

MSN版IE7
URLリンク(promotion.msn.co.jp)
URLリンク(download.msn.co.jp)

Yahoo版IE7
URLリンク(recommend.yahoo.co.jp)
URLリンク(recommend.yahoo.co.jp)
URLリンク(a109.g.akamai.net)

Google版IE7
URLリンク(www.google.com)
URLリンク(dl.google.com)



241:デフォルトの名無しさん
07/03/24 22:04:58
テレビ番組の番組表なんですけど
その日によってURLが変わるんですけど
これをお気に入りにできませんか?

スクリプトのようなお気に入りってできます?

ローカルHTMLを経由してやるのは簡単ですが
ちょっと醜いやり方のような・・・

242:デフォルトの名無しさん
07/03/25 02:13:04
IEコンポーネントに関係あるかなぁそれ。
日付に合わせてURLを作成して移動するbookmarklet作ればいいんでない?


243:241
07/03/25 09:45:27
THX!
javascript:ってやつですね?

IE特有の機能で、多分スクリプトに関係しているので
ここか、と思いました。
普通のHTML内のスクリプトとはちょっと違いますし・・・
(上述のローカルHTMLならそうかも)

ちなみにここってBHOとかは作らないんですか?
どうもありがとうございました。

244:243
07/03/31 00:23:07
ええともはやスレ違いなので質問という訳ではなく
独り言なのですが・・・

ブックマークレットってローカルファイルを表示中のIEからは
スクリプトブロックされて動かないみたいですね・・・
(XP SP2以前は動いたような?)

というかこういうのってどのスレに行けばいいのだろうか?
WSHでもHTAでもHTMLでもないし・・・

245:デフォルトの名無しさん
07/03/31 00:28:43
>>244
Web制作板だっけ? そんな板があったハズ。

246:244
07/03/31 16:48:21
すいません・・・何度も・・・
以前にもWeb制作板内を探したんですが
やはりWebサイトを作る、という方向性で
IE依存のスクリプトやIE固有の機能に関しては
あまり積極的ではないような・・・?
スクリプトの場合、こことかはいいのかな、とも思うんですが・・・
スレリンク(hp板)
どうも度々すみませんでした

247:デフォルトの名無しさん
07/04/08 20:44:26
質問です。

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にキャストして、
同じようにイベントを設定した場合は普通に動きます。どうすればいいでしょうか?

248:デフォルトの名無しさん
07/04/09 20:00:14
他と全く同じようにしてムリならばムリなんだろう

249:デフォルトの名無しさん
07/04/16 18:34:24
選択範囲の座標を得る方法を教えて下さい。
IHTMLTxtRange 辺りかな?と思ったのですが、分かりませんでした。

250:デフォルトの名無しさん
07/04/18 22:08:02
このスレってまだ生きていますよね。
IEコンポ使ってhtmlの表示を行っている途中で
ある特定の<img src="xxx">が出現したら、その画像を置き換えたいのですが
やり方がどうもわかりません。
htmlを書き換えて一時ファイルを作成してとかではなく、メモリストリームとかで処理したいのですが
ヒントとか、解説があるサイトとかあれば教えてください。


251:デフォルトの名無しさん
07/04/18 22:17:48
URLリンク(tvde.web.infoseek.co.jp)

やだやだ…そんなところ舐めないでよぉ

252:デフォルトの名無しさん
07/04/20 05:58:23
>>250
馬鹿のスクリプト厨で当然.NETもよく知らない俺ですが
ActiveXならbody.onloadのタイミングとかで
document.imagesを調べる、というのでは駄目でしょうか?

253:デフォルトの名無しさん
07/04/20 07:05:59
>>249
馬鹿のスクリプト厨です

IWebBrowser2::get_Document ->
IDispatch::QueryInterface(IID_IHTMLDocument2) ->
IHTMLDocument2::get_selection ->
IHTMLSelectionObject::createRange ->
IDispatch::QueryInterface(IID_IHTMLTxtRange) ->
IHTMLTxtRange::get_text

で、できました。スクリプトの場合と殆ど同じですね

254:249
07/04/20 08:23:56
>253
どうもありがとうございます。
ただ、IHTMLTxtRange::get_textって、選択された文字列そのものですよね?
あいうえお
 ~~~~~~
  ↑ここが選択されている場合、「いうえ」が納まっている。

私が欲しいのは文字列そのものではなく、その選択されている範囲座標なんです。
例えば、xy座標で、左上が10:10、右下が20:60 みたいな。
要は、マウスでクリックした座標が、選択範囲内か、そこから外れた位置なのか?
を知りたいわけです。

255:253
07/04/20 21:54:40
>>254
おおこれは大変勘違いしました。お恥ずかしい・・・
どうも申し訳ございません。忘れてください・・・

256:デフォルトの名無しさん
07/04/21 14:59:24
選択されていれば範囲内
選択されていなければ範囲外

257:デフォルトの名無しさん
07/05/14 21:41:12
IHTMLDocumentから何とかIWebBrowserを取得する事ってできないですかね?

258:デフォルトの名無しさん
07/05/16 22:25:34
「IHTMLDocument2からIWebBrowser2を取得する」なら
「ウインドウハンドルからIWebBrowser2を取得したい」で
ぐぐって出てくるコードに該当個所がある。

259:デフォルトの名無しさん
07/05/17 16:36:45
250とかぶるけど、特定のURLへのリクエストを別のURLにリダイレクトしたい。
Navigate()再発行とかするとimg srcでうまくいかないからダメ。
OnBeforeNavigate2とかのタイミングで、URLをコッソリ書き換えることが出来ればいいんだが。

IInternetProtocolImplとかそのあたりを実装するんじゃまいかと思ってるんだが、誰か知らない?

260:デフォルトの名無しさん
07/05/17 18:45:00
知らんけどイベントハンドラ実装した?

261:259
07/05/17 18:56:01
>>260
OnBeforeNavigateイベントでURLを取得は出来るが、LPCTSTRなので書き換えは出来ない。

たぶんイベントじゃないと思うんだよね。PassthroughAPPとかそのあたりのヨカン。
ドキュメントが少なすぎてわからん。

262:デフォルトの名無しさん
07/05/17 20:24:06
OnBeforeNavigateでキャンセルしてNavigateじゃだめなん?

263:259
07/05/18 11:49:16
>>262

それだと<img src=""> のときに画像表示がキャンセルされてページが遷移しちゃうからダメ。

264:259
07/05/18 12:10:07
説明が足りないみたいなのでもう一回。

ある書き換え不能なサイトのHTMLに、存在しないサーバへの画像リンクが多数埋め込まれている。
オレは本当の画像の所在を知っているので、問い合わせ先サーバ名をこっそり差し替え、存在しないサーバが存在するかのようにレンダリングしたい。

プロセス外に影響がないようにしたいので、etc/hosts をいじるとかはしたくない。


265:デフォルトの名無しさん
07/05/18 15:31:59
オミトロンを使えばいいような気がする

266:259
07/05/18 18:37:59
>> 265
あーほんとだー できそうだー

267: ◆PAa2MRiwDQ
07/05/28 16:12:55
お世話になります。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;


268: ◆PAa2MRiwDQ
07/05/28 16:14:54

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);

269:デフォルトの名無しさん
07/06/12 19:58:16
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( "URLリンク(www.google.com) ), flags( 0 ), target( "" ), post( "" ), headers( "" );
iweb->Navigate2( &url, &flags, &target, &post, &headers );
エラー処理は省略してますがこんな感じです。
何か処理が足りて無いのだと思うのですが、よろしく願いします。

270:デフォルトの名無しさん
07/06/26 12:29:56
>>269
Vistaを使ってないのでわからないですが、
Vistaでは他のゾーンにジャンプする場合
必ず他ウィンドウで開く仕様なんじゃないですか?

最初にInternetExplorerオブジェクトが生成された場合のゾーンが
インターネットゾーンじゃないんでしょうね。
XPでもオブジェクト生成すると
アドレスバーには何も無いものが出てくるので
初期ゾーンが何かよくわからないですが・・・

くだらないやり方ですがiexplore.exeにURLを指定して起動すれば
ゾーン間ジャンプを避けられるんじゃないでしょうか?
それで後からShell.ApplictionでIWebBrowserを探して取得する、とか。

271:デフォルトの名無しさん
07/06/26 12:39:30
>>267
私はATLもMFCも知らないのでよくわかりませんが、
Invokeが呼び出されない、というからには
IDispatchが使われてないんでしょう。
IDispatch継承のカスタムインターフェースを実装したオブジェクトの場合
IDispatchが呼び出されるかカスタム部分が呼び出されるかは
場合によって異なります。
スクリプト言語やVBでレイトバインディングを使うと
IDispatchが呼び出されますが
それ以外の多くの場合にはカスタム部分が呼び出され、
IDispatchは無視されるはずです。

272:VC--
07/06/30 17:34:02
vcでCHtmlViewを継承して、javascriptを操作するプログラムを作りたいんですが・・・
とりあえず、CHtmlView::Navigate2を使って、URLを表示しただけで、具体的な方法が
わかりません。

例えば、あるサイトで画像をクリックしたら、画像が変化する(javascriptで実装)みたいなプログラム
があったとして、擬似的に発動させる方法が知りたいです。
キーボードイベント、マウスイベントで発生させる以外の方法で
知ってたらご教授願いします。

273:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/04 13:58:59
IEとかエクスプローラのアドレスバーから検索するときの
urlってどこから取得できるんだろう

275:デフォルトの名無しさん
07/08/04 14:56:19
レジストリでも検索してみたら?

276:デフォルトの名無しさん
07/08/04 21:40:42
regmonでみれば?

277:デフォルトの名無しさん
07/08/15 11:42:40
もうどうしても解決できなかったので質問させてください。
downloadcompleteイベントだけがどうしても発生しません。

環境 EXCEL2003sp2 VBA XPSP2 ブラウザ6.0

navigatecomplete2,documentcompleteは発生します。ただrefreshをさせたときは動作しない、(上のほうのレスにもあります)ので
downloadcompleteを使いたいのです。
一番近い私と同じ症状を下記ページで見つけました
URLリンク(www.microsoft.com)
↑の「WebBrowser コンポーネントの DownloadComplete イベントにうついて」です。
がmshtml.dllはPCに入っています。参照設定に問題あるのかと思いましたが、よく分かりませんでした。
F2キーを押してオブジェクトブラウザを見てもちゃんとdownloadcompleteはありますから、問題はないと思うのですが・・。

busyをdo loopはできればやりたくないです。
StatusTextChangeを使うのもサイトによっては問題が起きるでしょうからできれば避けたいです。

問題のxlsファイルをUPすることもできます。

278:デフォルトの名無しさん
07/08/17 01:28:34
すでに開いているIEのセッションからクッキーを取り出し、
IEコンポーネントを利用した自アプリでそのクッキーの情報を使う、
みたいなことは可能でしょうか?
あるいは単純に既存のIEと自アプリとでセッションを共有できればいいのですが、
レジストリでBrowseNewProcessというキーをNoにすることで全てのIEが
同一のプロセスで起動されるという情報がMSサイトにありましたが、
どうも効果がないようなんです。

279:デフォルトの名無しさん
07/08/20 22:20:26
IEコンポーネントで自分のuseragentを取得するのはどうやるんだぜ?
JavaScriptsだとnavigator.userAgentだと思うがVC++のやりかたわからんのだぜ


280:デフォルトの名無しさん
07/08/21 02:16:36
UrlMkGetSessionOption

281:デフォルトの名無しさん
07/08/21 20:27:24
>>280


282:デフォルトの名無しさん
07/08/23 22:03:01
IWebBrowser2::GetLocationURLでIEで表示されいてるURLを取得したのですが、IE7などのタブで現在表示されているかいないかの判定方法があれば教えて下さい。

283:デフォルトの名無しさん
07/08/26 20:01:34
自己怪血。ググッて>>282にヒットしたヤシはここ嫁
URLリンク(www.codeproject.com)

284:デフォルトの名無しさん
07/09/02 20:24:40
IEコンポを使った専用ブラウザを作ったのだけど、
ツール>インターネットオプション>セキュリティ>レベルのカスタマイズ
その他>混在したコンテンツを表示する
をOFFにしたいんだけど、どのInterfaceから操作できるんでしょうか?

285:デフォルトの名無しさん
07/09/17 02:58:47
>>128
URLリンク(msdn.microsoft.com)

DHTMLオブジェクト モデルのおかげで、ページの構造をその場で修正できますが、
F5キーを押すか、ブラウザの[最新の情報に更新(Refresh)]ボタンをクリックしたと
たんに変更内容がすべて失われます。DocumentCompleteイベントを処理してコード
ウィンドウを最新の情報に更新することもできます(DownloadCompleteイベントは、
DocumentCompleteよりも前に発生することに注目してください)。ですから、ページを
初めてダウンロードするときに発生するDownloadCompleteは無視して、更新によって
発生するときだけ、このイベントを扱うようにします。単純なBoolean型のメンバ、たとえ
ばm_bDocumentCompletedなどを使えば、このような状況を簡単に区別できます。

286:デフォルトの名無しさん
07/09/22 13:26:08
ie6までは、貼り付けたieコンポーネント内のリンクを
ユーザーが Enterキーで開くことが出来たのですが、

ie7から、開くことが出来なくなりました
キー操作でリンクを開く方法って、ないでしょうか???

287:デフォルトの名無しさん
07/09/26 13:40:19
URLリンク(www.nitoyon.com)
↑のHPの真ん中当たりのページを解析する/変更する2のソースなのですが、
コピペして実行しても期待通りの動作をしません。

if( strcmp( pszBuf, "temp") == 0){
 // innerHTML を設定
 pElement->put_innerHTML( L"hogehoge") ;
}

このif文の中には入るのですが、put_innerHTMLでHTMLにhogehogeと表示させる事が出来ません。
対象のHTMLには<p id="temp"></p>のように記述しています。
どなたか詳しい方助けてください。

288:デフォルトの名無しさん
07/09/26 20:55:53
>>287
俺がやったらうまくいったよ。
そのページを書いた人もおそらくうまくいっただろうし、
お前のプログラムに何か問題があるんだと思う。

何か変にいじっていない?

289:デフォルトの名無しさん
07/09/26 21:21:21
>>288
特にいじってないですが・・・
その試してみたソースうpしてもらえませんか?

それか俺のHTMLの方のソースに問題があるのかな・・・
そっちの線はうすいと思うけど・・・

290:デフォルトの名無しさん
07/09/26 22:00:22
>>289
URLリンク(kansai2channeler.hp.infoseek.co.jp)

IEコンポーネントの使い方2のソースを基に、
WM_CREATEでいきなりローカルのHTMLを表示するようにし、
GOボタンを押したときに例のテキスト変更の処理を行うようにしてある。

あとどうしても気に入らない点を自分のスタイルに書き換えているが気にするな。
VC++ 8だから"AtlAxWin80"にしてあることにやや注意。

291:デフォルトの名無しさん
07/09/26 23:22:34
>>290
ありがとうございます。ちょっと今アホな事してしまって開発環境があぼんしてしまったので、
再度環境を整えたら試してみます。

292:デフォルトの名無しさん
07/09/27 15:21:53
>>291
ん~どうやら
pElement->put_innerHTML( L"hogehoge");
の文でデバッガが立ち上がって落ちます。
<body>タグの間に

<p><div id="temp"></div></p>

って書いてるのですが、もしかして根本的に何か違いますかコレ

293:デフォルトの名無しさん
07/09/27 18:49:56
と、思ったら、ビルドをdebugからreleaseに変えたら無事動作しましたm(_ _)m

294:デフォルトの名無しさん
07/10/05 05:36:23
IEコンポーネントを利用してWin32で作成したウィンドウ内にHTMLを表示させているのですが、
表示させているHTML内のJavaScriptから、アプリケーション側の関数を実行する事は可能でしょうか?

295:デフォルトの名無しさん
07/10/05 20:35:21
ウイルスでも仕込むつもり?


296:デフォルトの名無しさん
07/10/05 21:58:22
>>295
いえ、ただJavaScriptで出来ない処理をアプリケーションに任せようと思って・・・。
逆は出来るんですけど、JavaScript側からアプリケーションの関数の実行は出来ないのでしょうか?

297:デフォルトの名無しさん
07/10/05 22:15:41
>>296
できるよ。externalで実装する。説明はめんどくさいからしないけど、
需要がある話なのでMSDNとかに載ってるんじゃないかなあ。

298:デフォルトの名無しさん
07/10/05 22:19:42
>>297
externalですか。ちょっとググってみます。
なんか1から丁寧に解説してくれてるサイトがあればいいのですが、
なかなかそういうのが見つからなくて結構困ってます。
VisualStudioの構造体の中身が勝手に表示される機能をつかって、
メソッド名から機能を予測して色々試してみる方法には限界が・・・

299:デフォルトの名無しさん
07/10/05 22:28:05
今アプリケーション側からJavaScriptの関数の実行はURLにjavascript:関数();でやってるのですが、
external使うともう少しちゃんとした方法で出来そうな感じですね。ただ使い方がさっぱりですが。

300:デフォルトの名無しさん
07/10/05 22:31:35
>>299
おまえ>>287だろ。マルチ野郎は氏ね。

301:デフォルトの名無しさん
07/10/05 23:20:22
WebBrowser1と2じゃまた違うっぽいですね。1ならいっぱい転がってるのに。。。
C#とVBばかりでなかなか読めないけど・・・

302:デフォルトの名無しさん
07/10/08 22:01:28
>>301
WebBroser1と2?なんか勘違いしてる気がするなあ。

externalはキーワードとしてちょっと曖昧だったかも。GetExternalで再度。
DonutRAPTとかでも実装してた気がするから、見ようと思えば見れると思う。
COMだから、C#/VB.NETよりC++のほうが普通に楽ですよ。

303:デフォルトの名無しさん
07/10/09 21:13:59
>>301
GetExternalだともっと情報が少なくなってますね・・・。
色々見てるとInvoke()とかInvokeScript()あたりが臭そうなのですが、
引数が多い上に、それぞれの引数が何を意味しているのか分からないので全く使えないのが現状です。

304:デフォルトの名無しさん
07/10/10 03:06:13
IDocHostUIHandlerインターフェース実装してGetExternalでIDispatchインターフェース実装したクラスのポインタ食わせてやればいけるはずだったと思うが。

305:デフォルトの名無しさん
07/10/11 04:43:11
>>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); のみです。これは仕様なのでしょうか?普通の関数のように使えないですか?

306:デフォルトの名無しさん
07/10/11 11:30:43
NavigateComplete2とか待たないといけないんじゃね

307:デフォルトの名無しさん
07/10/11 12:38:17
>>306
それをキーワードに検索するといい感じのがヒットしたので使ってみました。
以下のコードをNavigate2の後に入れたのですが無限ループになってしまいますね。

while(pWB2->get_Busy(&pBusy)==VARIANT_TRUE || pWB2->get_ReadyState(&state)!=READYSTATE_COMPLETE){
  Sleep(100);
}

なんか全然COMを理解してないような気がするのですが、少しソースを見ていただけないでしょうか?
URLリンク(ossan.fam.cx)
パスはieです。

308:デフォルトの名無しさん
07/10/11 15:01:57
>>307
こいつはマルチ野郎なので以後放置で

309:デフォルトの名無しさん
07/10/11 20:24:04
IEコンポーネントなんだけど、そのプロセスでだけキャッシュの保存先を
変更ってできる?

310:デフォルトの名無しさん
07/10/11 21:23:06
>>307
当たり前じゃん。


311:デフォルトの名無しさん
07/10/11 23:00:51
ゲッラゲラ笑った

C++系以外の言語から移植して気付いてないとかか?

312:デフォルトの名無しさん
07/10/11 23:06:26
Returns S_OK if successful, or an error value otherwise.



313:デフォルトの名無しさん
07/10/12 04:02:40
>>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が来ないのは何故なんでしょうか?

314:デフォルトの名無しさん
07/10/12 05:03:59
やはり、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);

315:デフォルトの名無しさん
07/10/12 10:48:14
COMどころかスレッドも理解してないじゃん

316:デフォルトの名無しさん
07/10/13 02:45:43
javascript:test();に問題があるかも

317:デフォルトの名無しさん
07/10/14 10:14:14
結局どうすれば解決できるのでしょうか?

318:デフォルトの名無しさん
07/10/14 10:27:56
はい

319:デフォルトの名無しさん
07/10/14 13:53:42
>>317
こいつは自分で考える気が微塵もないクソ野郎です。以下放置で。

320:デフォルトの名無しさん
07/10/15 00:33:58
>>319
なんでそんなに執拗にからんでくるんですか?
ちゃんと考えてるし、色々努力してます。どうやら才能がないらしいですが。。。

321:デフォルトの名無しさん
07/10/18 05:17:57
質問です。
クッキーによるセッション管理をしてるサイトなのですが
途中まで、WebRequestクラスでログイン処理などをした後
その情報を使って、WebBrowserコンポーネントでそのサイトにアクセスしたいのです。
そこでクッキーを引き継がせる方法を考えたのですが
WebRequest側は、CookieContainerでクッキーを保持してるのですが
IEコンポネ側に対応したプロパティーが見当たりません。

何かいい方法はありませんでしょうか?
よろしくお願いします。

環境はC♯です。

322:デフォルトの名無しさん
07/10/18 12:55:03
いい方法はあります。

323:デフォルトの名無しさん
07/10/20 03:46:31
なんか、変な流れになっちまったな。
変な応答してるヤツは何がしたいんだ?

>>321
手軽な方法としては、一度、
WebBrowserのdocumentプロパティを
mshtml.IHTMLDocument2にキャストして
writeの中に、WebRequestクラスで受信したデータを放り込めば
クッキー情報含めて引き継がれるよん。


324:デフォルトの名無しさん
07/10/20 04:23:16
>>323
出来ない。
APIのInternetSetCookie で設定する。


325:デフォルトの名無しさん
07/10/22 19:09:00
C++ MFC で、HEADメソッドを手軽に送信できるような関数ないかな
いちいち
HEAD URLリンク(hoge.fuge.com) HTTP/1.1
とか書きたくないんだぜ

326:デフォルトの名無しさん
07/10/23 04:41:11
つくればいいじゃない

327:デフォルトの名無しさん
07/11/07 19:01:07
Temporary Internet Files の保存先を任意のフォルダに変更したいんだけど
どこいじればいい?
同時に立ち上がってるほかのプロセスに影響なく、特定のIWebBrowserのインスタンスだけ
変更できるとうれしいんだけど。

328:デフォルトの名無しさん
07/11/07 22:00:06
普通に無理だろ常識的に考えて

329:デフォルトの名無しさん
07/11/07 23:41:56
IEコンポーネントを使わなければおk

330:327
07/11/08 11:06:15
>>328
そうかな。。。出来ても良さそうなもんだけどなあ。。

331:デフォルトの名無しさん
07/11/11 19:51:17
IEの関数コールを監視して、どこでフォルダアクセスしてるか見れば?
最悪その関数をそのプロセスに対して差し替えて実現。

332:デフォルトの名無しさん
07/11/12 00:47:34
関数とかAPIとかのレベルじゃなくね?


333:デフォルトの名無しさん
07/11/12 02:51:06
フック。

334:デフォルトの名無しさん
07/11/12 13:26:31
定番の質問だが
・IEのクリック音を止めたい
・Temporary Internet Filesの位置を変えたい
・Proxyを追加したい。
この辺の事は、コンポネには装備されてなくて
IE自体も、直接レジストリを操作してるから
どうしてもやりたいなら、該当するレジストリの箇所を書き換えるしかない。


335:デフォルトの名無しさん
07/11/13 04:33:33
レジストリを書き替えたら当然純正IEにも影響が出ることをお忘れなく

336:デフォルトの名無しさん
07/11/13 04:59:44
if( strcmp(id, "foo") == 0 ){
pElement->put_innerHTML(A2OLE(boo));
}

こんな感じでidがfooである領域を書き換える事は可能だけど、
この領域に文字列を単純に追加する事って出来る?
今のところfoo内を読み込んで、strcatで文字を追加した後put_innerHTMLでやってるんだけど、
これじゃ二度手間な気がするんだが。。。

337:デフォルトの名無しさん
07/11/13 18:39:20
あるツールの開発でIEコンポーネントを使うか否かを検討しています。
例えば、IEコンポーネントを用いたミニブラウザの場合、複数起動しても、
それぞれが独立したcookie情報を用いることは可能でしょうか。



338:デフォルトの名無しさん
07/11/13 20:34:07
独立したCookieってどういうこと?
つかIE複数立ち上げて見ればわかるんじゃね

339:デフォルトの名無しさん
07/11/13 20:54:19
>>337
ブラウザが起動してる限り有効なクッキーの話だよね?
>>338がいうようにIE複数起動したときの動作がそのままIEコンポアプリ複数起動だとおもう。
たぶんクッキーは別になるんじゃないかな。

340:デフォルトの名無しさん
07/11/13 23:10:30
ちょっと質問が分かりにくかったようで、すみません。
例えば、mixiなどのオートログインが可能なサービスの場合、Cookie情報で
これを実現しています。ブラウザを複数起動しても、そのCookie情報が当然、
同じものがサーバーに送られます。(でないと、オートログインできません)

で、IEコンポーネントを用いたツールは、あくまでも別ツールなので、
仮にmixiにアクセスしたからと言って、自動でログインされても困るんですね。
そこで、Cookie情報はツールとブラウザとで異なったものにしておきたい。
また、ツールを複数起動した場合も、ツール毎にCookieは分けたいんですね。

で、IEの標準の動作では、複数起動しても、Cookieは共有というか共通になって
しまうんですが、IEコンポーネントの使い方次第で、Cookieをブラウザとは
別のものとして管理できるのかを知りたかったのですが、可能でしょうか。

341:デフォルトの名無しさん
07/11/13 23:18:49
Cookie自体はIEとの共有は避けられないと思った。
ただ、プロセス毎にCookieを利用しないようには出来るから、そのツール側で扱う情報を
Cookie以外の手法でなんとかするのがいいんじゃないの?

342:デフォルトの名無しさん
07/11/13 23:47:10
BeforeNavigate2でヘッダ弄ればなんとでもなるんじゃね?

343:デフォルトの名無しさん
07/11/14 00:06:51
返答ありがとうございました。
実験してみます。
感謝です

344:デフォルトの名無しさん
07/11/15 05:40:24
delphi7proでTwebbrowserを使って
チェックボックスやボタンを自動でクリックしたりするのをするようなソフトを作っています
そこで
e := WebBrowser1.OLEObject.Document.documentElement.getElementsByName('なまえ');
としているのですがオートメーションオブジェクトでサポートしていませんというエラーが出てしまいます
このエラーはどのような意味なのでしょうか

345:デフォルトの名無しさん
07/11/15 05:41:56
調べましたが、とっかかりさえ見つからないような状況ですので
わかる方がいらっしゃったら教えてください

346:デフォルトの名無しさん
07/11/15 11:07:04
getElementsByNameメソッドがあるのはDocumentだけだからじゃね?
"documentElement"が余計なんじゃね

347:デフォルトの名無しさん
07/11/16 20:21:41
ありがとうございます
e := WebBrowser1.OLEObject.Document.getElementsByName('なまえ');
e.Item(0).click();
のような感じで自動クリックできました

348:デフォルトの名無しさん
07/11/17 02:20:50
IEコンポーネントでは、HTMLをサイトから読み込んだあと、<IMG>や<IFRAME>内のCGやHTMLを
自動的にサーバーにアクセスして取得しますが、BeforeNavigate2のように、それらのデータを
取得しにいく前にイベントとして拾う方法がありましたら、教えてください。

また、redirectで別サイトにgetを送信する前に、それをイベントとして取得する方法があり
ましたら、これについてもお願いします。

349:デフォルトの名無しさん
07/11/17 04:28:54
自分でイベント作ったら?

350:デフォルトの名無しさん
07/11/17 16:40:32
>>349
そこまでの自由度あるの?

351:デフォルトの名無しさん
07/11/17 18:21:37
>>348 Proxy

352:327
07/11/28 10:52:27
NtQueryValueKeyにフックをかけて
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache
にウソを返すようにしたんだけど、切り替わらないorz

353:デフォルトの名無しさん
07/11/30 07:17:28
レジストリの値変更しても再起動するまで反映されないんだから
システムがどっかメモリ上にキャッシュしてるんだろ

354:デフォルトの名無しさん
07/12/01 18:17:18
VBを使用しております。
IEオブジェクトに表示中の画像ファイルを、指定のフォルダに保存するには
どのようにすればよいでしょうか?
要するに、マウスの右クリックで表示される「名前を付けて画像を保存」を自動行いたいのです。

アクセスするたびに、画像は変わるため、URLから指定しDLすることは出来ませんでした。

IEオブジェクトの保存したい画像のアイテムは
ie.document.all.item(x)
取得できました、この先がわかりません。

おわかりの方がおられましたらお教えください


355:デフォルトの名無しさん
07/12/01 20:39:58
SRC見てダウンロードすればいいんじゃね

356:デフォルトの名無しさん
07/12/01 22:12:03
>>355
URLを見てDLということですか?
アクセスのたびに変わるからNGと記載したのですが・・・

357:デフォルトの名無しさん
07/12/01 23:58:20
SRCプロパティのことじゃねーのかハゲ

358:デフォルトの名無しさん
07/12/02 13:40:06
>>357
うーんよくわかりません。
そのSRCプロパティのURLからDLすると、画像ファイルが変更されNGなのですが?

359:デフォルトの名無しさん
07/12/02 16:48:18
いみがわからない

360:デフォルトの名無しさん
07/12/02 18:02:41
>>359
下のセキュリティ画像みたいにアクセスすると画像が変わります。
URLリンク(signup.live.com)
変わると困るので、IEに表示中の画像がほしいのです

361:デフォルトの名無しさん
07/12/04 18:18:45
アクセスするたびに変わるのは、画像じゃなくてURLのほうじゃねえかw
それも変数の値が変わる程度で、呼び出し先のCGIは固定だか?

362:デフォルトの名無しさん
07/12/04 20:44:25
URLリンク(tool-6.net)
VS2005でアセーションエラーが出まして
なぜhMyIEがNULLになるのかがわかりません。

363:デフォルトの名無しさん
07/12/04 22:56:08
CreateWindowの戻り値がNULLだから。

364:デフォルトの名無しさん
07/12/04 23:21:29
>>361
画像のURL指定し、ブラウザで表示させ、更新してもそのたびに変わるのですが?
いったいどう固定すると、画像も固定できるのでしょうか?

365:デフォルトの名無しさん
07/12/04 23:41:44
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);

366:デフォルトの名無しさん
07/12/05 01:28:41
GET値に乱数を追加する

367:デフォルトの名無しさん
07/12/05 11:27:57
>>364
画像URLは固定でリロードするたびに画像の内容が変わってしまうと言うことか
だからIEコンポで表示させた画像を取得したいと言うわけか
一時キャッシュ覗いて探してみるとか・・・
まぁ無理なんじゃね?

368:デフォルトの名無しさん
07/12/05 18:48:02
>>363
解決するためにはどうすればよいですかね?

369:デフォルトの名無しさん
07/12/06 11:29:13
いくら考えても解決出来ません。
お願いします。
解決方法を教えて下さい。

370:デフォルトの名無しさん
07/12/06 19:16:38
URLリンク(www.ezinfo.jp)
アセーションエラーが出るのは、初期化がいけないのですかね?

371:デフォルトの名無しさん
07/12/06 20:32:51
うっほほほへ!??!
できた!!!
クハハハハハハwwww
やっべぇwwww何コレwwwww気付かなかった俺バカスwwwww
ありがとうございましたぁ!!
うっひょひょひょwwww

372:デフォルトの名無しさん
07/12/07 19:12:42
C++を使用しています。

子ウィンドウを立ち上げてIEコンポーネントのブラウザを表示させたいのですが、
一度子ウィンドウを消して再度立ち上げるとファイルのダウンロードが発生して表示することができません。

原因に心あたりがある方、教えていただけませんか?

373:デフォルトの名無しさん
07/12/08 03:35:54
>>360
1.ドキュメント全体をビットマップで保存する
2.特定画像のみビットマップで保存する
3.キャッシュから見つけだして画像を表示する
と、いろいろ試してみたが、そのページのころころ変わる画像はキャッシュされてないっぽいので、
VBでやるなら、1か2になるかなあ
本気でやるならVBじゃなくてC++にしたほうがいいかと

374:デフォルトの名無しさん
07/12/16 12:04:27
IHTMLDocumentのwrite()ってjavascriptのdocument.writeとは違いますよね。
最初にabout:blank開いてからIHTMLDocument#write()すると書き込めるけど
特定のアドレスのHTML開いた後にIHTMLDocument#write()すると
いったんHTMLがクリアされて書き込みになる。
javascriptのdocument.writeみたいに、いつでも書き込むことができるインタフェースないですかね。
innerHTMLとかouterHTMLは事情により使いたくないのです。

375:デフォルトの名無しさん
07/12/16 12:52:00
同じだよ
読み込み完了後ならjavascriptのdocument.writeもページの置き換えになる
やってみろ

376:デフォルトの名無しさん
07/12/16 13:20:44
ページ移動時のカチッって音を消すにはどうすればいいのでしょうか?

377:374
07/12/16 13:28:08
>>375
うむープラガブルプロトコルとか特殊なことやって
ページ表示した後だから、うまくいかんのかなー

378:デフォルトの名無しさん
07/12/16 16:54:12
>>376
visible = falseにしとくか
レジストリいじるかしかない

379:374
07/12/16 16:57:30
ああああ、言っている意味を把握した。
なるほど、確かにHTML完全に読み終わった後の
javascriptのdocument.writeもページ置き換えになるね。
根本的な部分で理解が欠けていた・・・
ふむーじゃあ何とかしてDocumentCompleteさせなきゃいいのか。

380:デフォルトの名無しさん
07/12/16 17:21:29
innerHTMLとかで書けばいいんでないの?

381:デフォルトの名無しさん
07/12/16 17:38:58
>>378
pWB2.setVisible(FALSE);
じゃダメですか?何も変化がないのですが・・・

382:デフォルトの名無しさん
07/12/16 19:23:51
>>380
いや、それだと糞重いんで、なんとかしてdocument.write使いたいなと。
iframe src="about:blank"
として、そこに書き出すことで解決!

383:374
07/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
07/12/16 19:31:53
SafeArrayDestoryって要素の中身もvt見て、
VT_BSTRだったら勝手にSysFreeStringをやってくれるんだろうか。
だから先にSysFreeStringしちゃうと2重Freeで落ちるのかな。

385:デフォルトの名無しさん
07/12/16 20:27:16
IEコンポを使っている2ちゃんねるブラウザがその方法で追記してるから
不可能ではないはず

386:デフォルトの名無しさん
07/12/16 20:31:31
セキュリティーゾーンとかでいろいろ面倒だった気はするが

387:デフォルトの名無しさん
07/12/16 23:43:52
CHtmlView内で起こったスクリプトエラーをフックできないのですか?
おしえてエロい人

388:デフォルトの名無しさん
07/12/16 23:57:04
>>385
よく見かけるdelphiのコードではレイトバインディングで型変換はシステム任せにして
えいやっとwriteするけれど、きっとディスパッチの手間だけ速度では損するんだろうな。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch