IEコンポーネントを使い倒すスレ Ver.2at TECH
IEコンポーネントを使い倒すスレ Ver.2 - 暇つぶし2ch301:デフォルトの名無しさん
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するけれど、きっとディスパッチの手間だけ速度では損するんだろうな。

389:374
07/12/17 00:01:35
>>385
あ、おいらへのレス?
about:blankで開いたページならdoument.writeでも切り替わらないよ。
2ちゃんブラウザはたいていabout:blankに書いてるし。
あとはjavascriptでロード時に実行されるように書くか。

390:デフォルトの名無しさん
07/12/17 12:31:40
>>269
Vistaにしたら、そうなってしもうた。
>>270の方法で解決しそうだけど回りくどいな。


391:デフォルトの名無しさん
07/12/17 13:13:13
>>387
できます

392:デフォルトの名無しさん
07/12/17 17:10:09
>>391
いいからその方法をとっとと書けよクズが。
知っててワザとやってるなら性格悪いだけのクズだな。

393:デフォルトの名無しさん
07/12/17 18:29:35
どうしよっかな~

394:デフォルトの名無しさん
07/12/17 19:43:06
>>392
すごい時刻ゲットしてるからって嫉妬すんなよw

395:デフォルトの名無しさん
07/12/17 20:56:43
なんでこのスレには糞しかいないんだよ。
IEコンポーネント使う少ない人達同士仲良くしろよ畜生

396:デフォルトの名無しさん
07/12/17 21:09:38
自分の質問の答えが返ってこない=糞
ですか。そうですか。

397:デフォルトの名無しさん
07/12/17 23:03:59
>>395
自称糞じゃないお前がじゃんじゃん質問答えろ
手始に387からな、12時間まってやるから早くしろよ

398:デフォルトの名無しさん
07/12/18 12:51:04
自分の質問の答えが返ってこない=糞だとは誰も言ってねぇだろが。
>>391さんは性格がいいですね?こうですか?わかりません><

399:デフォルトの名無しさん
07/12/18 23:41:02
じゃあ横で俺が答えてみようか。
つーかキーワードでググったらここの>>235がヒットしたんだが。

400:デフォルトの名無しさん
07/12/19 14:50:25
まぁ言ってる事に同感できなくはないが、口が悪い。
スレが荒れる。

401:デフォルトの名無しさん
07/12/20 12:36:32
IEのレンダリング結果において、XY座標から、近傍のテキストを
取得するにはどうしたらいいですか?
IHTMLDocument2::elementFromPoint()
で、エレメントを取得できるのはわかったのですが、もっと 1 文字単位で
文字を検出したいのです。できたら、エレメント内あるいはドキュメント全体における
文字の位置がインデックスでわかるとうれしいです。

402:デフォルトの名無しさん
07/12/20 16:38:01
すくなくともIHTMLDocumentやElementの何かの関数を使えば取れる、
というものではないはず。
血を吐くような努力が必要。てか事実上無理だと思う。


403:デフォルトの名無しさん
07/12/20 23:32:04
工夫次第で無理ではないな。


404:402
07/12/20 23:32:51
>>403
だったら具体的なやり方書いてよ、天才プログラマーさん。

405:デフォルトの名無しさん
07/12/20 23:36:14
>>404
指定座標位置付近の文字をカーソルで選択して
その選択文字列を読み取ればいい。


406:403
07/12/20 23:50:21
>>404
君はボンクラ
私は天才プログラマー
ということでいいかね。


407:デフォルトの名無しさん
07/12/21 03:13:15
いいえ

408:デフォルトの名無しさん
07/12/21 08:06:24
URLリンク(deftv.atspace.com)
URLリンク(deftv.atspace.com)
URLリンク(deftv.atspace.com)


409:デフォルトの名無しさん
07/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

410:デフォルトの名無しさん
07/12/21 08:47:06
>>405
その指定座標付近の文字を選択ってのはどうやるんだ。
選択時のマウス動作をエミュレートすんのか。

411:デフォルトの名無しさん
07/12/21 12:28:59
>>408
精神的ブラクラ

412:401
07/12/21 12:50:22
みなさん、ありがとうございます。やっぱりちょいと難しそうですね。

413:デフォルトの名無しさん
07/12/21 13:07:00
>>410
カーソルで選択ってものすごい基本的なWindowsAPIじゃん。ウインドウズのプログラマなら誰でも知っているだろ。
マウス動作をエミュレートって・・・アフォカ

414:デフォルトの名無しさん
07/12/21 15:31:56
>>413
おお?それはテキスト入力にフォーカス当たった状態のこといってんの?
そうじゃなくブラウザ上のふつうのテキスト部分の話とおもったんだが。
それもできるんか。

415:デフォルトの名無しさん
07/12/21 16:02:58
>>414
基本的なことをまったく理解していないな。ブラウザ上で普通に範囲選択してCtrl+Cあるいは、右クリックでコピーが実行できるじゃん。
それをプログラム的に実行するだけ。


416:デフォルトの名無しさん
07/12/21 16:05:02
>>415
ぜひ、そのコードを教えてください

417:デフォルトの名無しさん
07/12/21 21:19:44
これでWM_COPYとか言ってきたらズゴーなんだが。

418:デフォルトの名無しさん
07/12/21 23:05:37
JavaScript技でそんなのがあったな。Selectionオブジェクトだかを作って
その占有領域の座標を取って処理するの。座標から近傍文字、の逆バージョンだけど、
ユーザーが選択操作してなくてもできてたので、この応用でなんとかならないかな?


419:デフォルトの名無しさん
07/12/21 23:42:10
URLリンク(deftv.atspace.com)

420:デフォルトの名無しさん
07/12/21 23:46:50
>>415
いやだから、もっと具体的なコードかけよ、そこまでいうなら。
マウスエミュレートもプゲラって言った以上、それもしないコードだぞ?
まず選択するためには、選択始点のテキストがどの座標に存在するか取得しないといかん。
ってかこの時点でこの件は目標は達成なんだが。

421:デフォルトの名無しさん
07/12/26 10:05:19
IHTMLElement から、実際の描画に使われてるフォントの種類やサイズを
調べるにはどうしたらいいですか? style とか見ても null なんですが、
他にどこを見ればよいものやら。

422:デフォルトの名無しさん
07/12/28 13:10:50
いまだに>>378が分からないのですが・・・
pWB2->put_Visible(VARIANT_FALSE);
では音は消えませんでした。もう少し詳しく教えて頂けませんか?

423:デフォルトの名無しさん
08/01/08 16:22:27
サムネイルのような画像を、そのリンク名と関連付けしてデータベース化したいと思っています。

表示中のサムネイル画像ファイルをキャッシュフォルダから拾う方法はあるでしょうか。
キャッシュフォルダには別名で格納されているようで、特定する方法が分かりませんでした。
作成日やサイズで特定しようにも、確実とは行きません。

直接GETする以外で何か良い方法をご存知の方、ご教示いただければと思います。

424:デフォルトの名無しさん
08/01/08 19:10:19
WinInet経由でいいなら、GetUrlCacheEntryInfoでキャッシュの情報が取れる。

425:423
08/01/09 09:59:39
>>424
これで何とかなりそうです。
すばらしい情報をありがとうございました。

426:デフォルトの名無しさん
08/01/13 23:43:43
プロキシ設定を自分のIEコンポーネントだけ別にすることはできますか?
InternetSetOption(NULL,.... )だとシステム全体に影響が及んでしまうので、
hInternetを指定して制限をかければいいのだと思いますが
コンポーネントが利用中のhInternetを知る方法が無いので困っています

427:デフォルトの名無しさん
08/01/14 18:45:46
>>426
私のソースにはこんなのがありました:
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, pInfo,sizeof(INTERNET_PROXY_INFO),0);

これで動いてたような気がするけど、何年も前のブツなので要検証。

428:デフォルトの名無しさん
08/01/17 15:01:00
IEコンポーネントを表示せずに、NavigateやDownloadCompleteを使って、
データの取得を行うことは可能なのでしょうか?

429:デフォルトの名無しさん
08/01/17 15:27:09
可能です

430:デフォルトの名無しさん
08/01/17 15:33:44
どうも有り難うございます。
う~ん、すると、Windowsサービス化も可能なんでしょうか?

System.Windows.Forms派生のクラスをnewした時点で、
変なことになっちゃうんでしょうか?

Windowsサービスは作ったことないので想像もつかないのですが、
通常、UIはサービスを持てないのですよね?
デスクトップとの対話をサービスに許可、とか設定せずに、
普通のデーモン的なデータ取得を行えると、だいぶ方向性が広がるのですが。

431:デフォルトの名無しさん
08/01/17 15:36:02
ううっ、下記の部分、逆でした。
>通常、UIはサービスを持てないのですよね?

Windowsサービスは、普通はUIを持てないのですよね。
ユーザがログインしない状況でも、IEコンポーネントでデータ取得を
行えると嬉しいのですが。

432:デフォルトの名無しさん
08/01/17 21:18:39
それはIEコンポでなければならないのか?

433:デフォルトの名無しさん
08/01/18 09:07:26
う~ん、取得したDOMを操作して、色々処理するので、
結局、何らかのブラウザエンジンは必要になるのです。

まぁ、ゲッコーとかに乗り換えるっていう手はあるのでしょうが、
IEコンポーネントを頑張って使い続けるか、
オープンソースのブラウザエンジンから不要なところをばっさり切って
使うかは、今後の大きな課題にはなるのですが‥‥。


434:デフォルトの名無しさん
08/01/18 18:48:48
>>430
そういうことは、人に聞くより自分で試したほうが早いぞ。

435:デフォルトの名無しさん
08/01/19 12:12:52
質問があります
IEではTAB、SHIFT+TABキーでフォーカスの移動が行われますが、
これを外部から行うにはどうすればいいでしょうか
TABキーイベントを送る、というのはナシの方向で・・・

436:デフォルトの名無しさん
08/01/19 19:45:22
SetFocus

437:デフォルトの名無しさん
08/01/20 03:11:38
IEのフォーム部品はウィンドウを持ってないからSetFocusは役に立たない

438:デフォルトの名無しさん
08/01/20 04:34:22
IHTMLDocument2::all、
IHTMLDocument2::activeElement、
IHTMLElement2::focus

439:デフォルトの名無しさん
08/01/20 10:06:41
>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するのって、ほんと難しいよな。

440:デフォルトの名無しさん
08/01/20 10:16:03
えーと、要するに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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
順調かと思ったら、何だこれは…

441:デフォルトの名無しさん
08/01/20 10:16:18
>>436-438
ありがとうございます!
試してみます!

ダイアログのように一発でやる方法があるかとさがしておりました!

442:デフォルトの名無しさん
08/01/20 10:30:21
"DOCHOSTUIFLAG_NO3DOUTERBORDER" が定義されていない…

mshtmhst.h内で定義されてるはずのものなのか、それ以外のどこかなのかは
判らんが、とにかく無い。

443:デフォルトの名無しさん
08/01/20 10:47:47
うちのMsHtmHst.hタンには定義されてるよ

444:デフォルトの名無しさん
08/01/20 10:49:20
よし、Platform SDK落として、中のmshtmhst.hをMinGWのincludeに突っ込んだら出来た。

445:デフォルトの名無しさん
08/01/23 23:59:25
すみません教えてください
取得したpElementがインラインフレームか
普通のフレームかを判定したいのですが
良い方法はあります?


446:デフォルトの名無しさん
08/01/24 00:28:36
tagName見るなりIHTMLIFrameElement取得してみるなりでいいんじゃね

447:デフォルトの名無しさん
08/01/24 01:07:54
>>446
ありがとうございます
これをヒントに調べてみます

448:デフォルトの名無しさん
08/01/31 10:55:56
ho

449:デフォルトの名無しさん
08/01/31 13:00:15
IInternetProtocol::Start()でゴニョゴニョするコードを書いているんだが、
呼び出し元のIWebBrowser2を取得することって出来ないのかな。
複数ウィンドウのブラウザで、IWebBrowser2が複数存在しているので、
グローバル変数では解決出来ない。
スレッドが分かれているわけでもないのでTLSでも解決できない。

450:デフォルトの名無しさん
08/01/31 16:02:17
>>449
IWindowForBindingUIでググれ

451:デフォルトの名無しさん
08/02/09 01:17:35
すみません 教えてください
過去ログで見た気もしますが 見つけられなくて・・・

get_innerHTMLでHTMLソースを取った場合はIEが有る程度整形して
ますが これを メニュー → 表示 → ソースで
表示されるようにオリジナルの大文字・小文字もある状態で
取りたいのですが可能でしょうか?

452:デフォルトの名無しさん
08/02/09 02:09:13
kanou

453:451
08/02/09 02:27:55
>>452
すみません 困っています
もし よろしければ教えていただけないでしょうか?

454:デフォルトの名無しさん
08/02/09 23:24:16
MFCでURLジャンプ時のスクリプトエラー非表示はどうすればいいですか?

IOleCommandTarget::Execで
OLECMDID_SHOWSCRIPTERRORを使うのでしたら、
どのように使うのか教えていただきたいです。

【関連事項】
AtlhostEx.h
ScriptErrorCommandTargetImpl.h
DialogKiller.h

455:デフォルトの名無しさん
08/02/10 00:54:23
今日のメニューについて
URLリンク(zoomtv.atspace.com)

456:デフォルトの名無しさん
08/02/12 13:40:22
CreateWindow("AtlAxWin", "Shell.Explorer.2"・・・
としたときにsubmitやクリックできますか

457:デフォルトの名無しさん
08/02/27 13:53:42
IE7になってマウスの真ん中ボタンで新しいウインドウで
開くようになったんですが、IEコンポーネントを使った
あぷりでは、これは自分で書くしかないんでしょうか?
それとも簡単に有効にする方法があるんですか?

知っている方いましたら教えてください。

458:デフォルトの名無しさん
08/02/27 14:41:58
IEはIEコンポーネントを使ってるだけで、
真ん中ボタンクリックで新規ウィンドウはIEに実装されただけのもの。
IEコンポーネント自体にそういう機能があるわけではない。

459:デフォルトの名無しさん
08/02/27 14:48:16
>>458
ありがとう。
ということは自分でやるしかないんですね。
かなり大変そうですけど・・

460:デフォルトの名無しさん
08/02/27 15:53:19
>>459
おいおい、ボタン押してウィンドウ開くなんて大した手間じゃないだろう

461:デフォルトの名無しさん
08/02/27 17:46:36
>>456
AtlAxGetControl
AtlAxGetHost

>>460
新しいウィンドウで開くとなると結構処理が必要じゃない?

462:デフォルトの名無しさん
08/02/28 11:28:49
大抵のダブブラウザは実装してる

463:デフォルトの名無しさん
08/03/01 04:18:40
ATL使わずにIWebBrowser2のイベントを取得したいんだけど、
どういうコード書けばいいのか参考になるサイトとかないですか

探し方が悪いのかATLなコードしか見つからないんです。

464:デフォルトの名無しさん
08/03/01 04:27:15
そんな事できるのか・・・

465:デフォルトの名無しさん
08/03/01 05:01:32
>>463
DWebBrowserEvents2のこと? だったら普通にOLEコントロール扱うようにすればいけるんじゃね?
まあMFCとかATLとか使わずにやろうとすると死ぬほど面倒らしいが。

466:デフォルトの名無しさん
08/03/01 06:19:08
>>465
うん、DWebBrowserEvents2。
WindowsMobile版のIEコンポーネントを使ってるんだけど、
ATLでの実装がコンパイル通らなくて、
ATLなしでの実装にするか・・・?ってとこにたどり着いたとこ。
死ぬほど面倒ならATLが通る方法調べるほうが楽かなぁ。。

467:デフォルトの名無しさん
08/03/01 06:20:39
コンパイラはなに?

468:デフォルトの名無しさん
08/03/01 06:29:49
VS2005Pro、C++でやってる

469:デフォルトの名無しさん
08/03/01 08:03:29
コンパイルエラーの内容を書いた方がいいのでは。
あと接続ポイント周りをちゃんと理解すると光が見えるかも。

470:デフォルトの名無しさん
08/03/01 10:10:11
>>466
Essential COMに載ってるよ。ネストクラスしたりとかなり面倒だったけど
ATLなし(Win32SDKのみ)でイベント取得までは確認できた。

471:デフォルトの名無しさん
08/03/01 10:50:34
VC++あるなら、CHtmlViewのソースでも見るとか。CHtmlViewが使えるならそれ使うに越したことはないと思うが。

472:デフォルトの名無しさん
08/04/17 02:59:40
IEコンポーネントのJavaScriptを一括で

無効にする方法ってありますか?


473:デフォルトの名無しさん
08/04/17 22:50:05
あるんじゃないの?
俺はやったことないけど、使っているブラウザ (Donut RAPT)が
ボタン1つでオンオフできる機能を持っている。

474:デフォルトの名無しさん
08/04/24 20:30:33
表示してるページで右クリックメニューに追加した「irvineにすべてのURLを送る」みたいのを
自動で実行するのはどうしたらできますか?

475:デフォルトの名無しさん
08/04/27 02:08:05
MFCで組んでるんですが、いろんなサイトを見ていくと使用メモリが増える一方。
メモリリークしていると思ったほうがいいのでしょうか?
それとも履歴蓄積によるものと考えてしまっていいのでしょうか?

476:デフォルトの名無しさん
08/04/27 02:28:31
>>475
メモリリークっていうか、開放し忘れじゃね?
よくあるみたいだよ。


477:デフォルトの名無しさん
08/04/27 03:49:52
IEコンポーネントを使うとそうなるって問題もあったはず。
一旦アプリを最小化すると開放されたようになる。
本当にリークしてるのか、本当に開放されてるのか、分からないけどね。

478:デフォルトの名無しさん
08/04/27 12:15:51
>>477
最小化すると減るのはワーキングセットの量。

479:デフォルトの名無しさん
08/04/29 08:38:59
タスクマネージャーとかで見る使用メモリが増えていくからといって
メモリリークしてるとは限らない。
URLリンク(kkkon.hp.infoseek.co.jp)
この辺参考にしてみるといいかもね。

480:デフォルトの名無しさん
08/05/08 17:50:12
なんかFlash関係が動かなかったりするね。

481:デフォルトの名無しさん
08/05/08 19:30:41
IEコンポーネントでページを開くときに、ソケットで別の端末にページのURLを送って
同じページを開かせるようなプログラムを作ったんですけど

CComQIPtr<IWebBrowser2> pWB2
pWB2->Navigate2(メッセージで送られたURL)

としてURLにジャンプしようとすると、

「"URL"が見つかりません。パスまたはインターネットアドレスが正しいかどうかを確認してください。」

というメッセージボックスが表示され、メッセージ受信側のクライアントはURLにジャンプできません。

IEコンポーネントで表示させた、そのURLのハイパーリンクを直接クリックした時や
直接IEを起動してアドレス直打ちをした場合、正しくページに飛ぶことが出来ました。

また、メッセージ受信側がIE7を入れている場合ではジャンプできない現象が起きましたが
IE6を入れているPCで試したところ、メッセージ受信側もジャンプすることが出来ました。

IE7になってからNavigate2周りで何か変更があったのでしょうか。
おとなしくIE6に戻るしかありませんか?


482:デフォルトの名無しさん
08/05/09 02:27:06
IEコンポーネントでHTML内に記述されたJavascriptの関数を実行したいのですが、
可能でしょうか?HTMLは自分で用意したものです。

483:デフォルトの名無しさん
08/05/09 20:27:54
>>482
できるよ。
スクリプトを動的に追加することができるから追加したコードで静的なコードを実行すればいい。

HTMLを自分で用意するんだったらIEコンポーネントでやる用途が想像できないけど?

484:デフォルトの名無しさん
08/05/10 04:39:22
>>483
URLリンク(homepage3.nifty.com)
このページの情報を参考にして実装する事ができました。

では逆にHTML側から、ブラウザ(アプリケーション)の関数を実行する事は可能でしょうか?
さすがに無理ですかね、それは・・・

485:デフォルトの名無しさん
08/05/10 06:30:53
>>484
window.external経由ならわりと楽勝で。

486:デフォルトの名無しさん
08/05/18 09:43:36
IE拡張(BrowserObjectHelper)からマイドキュメントフォルダにファイル書き込んでるんだけど
IE保護モードがじゃまして書き込めねぇ・・・
いくつかMSのサイト読んでレジストリいじったりしたが、相変わらず駄目だ
誰かやり方おしえて。

487:デフォルトの名無しさん
08/05/18 12:21:05
アウトプロセスのCOMサーバでも作ってデータ送って書き込ませれば?

488:デフォルトの名無しさん
08/05/19 09:31:02
それは最後の手にしたいな。
URLリンク(www.microsoft.com)
書き込み時に、ブローカープロセスの昇格ってのが出るようにできるっぽいけど、
ここにあるようにレジストリに書いたがうまくいかん。

489:デフォルトの名無しさん
08/05/19 09:37:46
ああ、COMサーバーのCLSIDを登録するってことなんだな、これは・・・
うう、めんどくせー

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


491:デフォルトの名無しさん
08/05/23 19:58:46
>>490
HTMLID_FINDでググれ
URLリンク(support.microsoft.com)

492:デフォルトの名無しさん
08/05/27 02:44:37
ダイアログに WebBrowser を 貼り付けて 表示しています。
その ページ内で window.close() を 呼んだら

ダイアログ自体を終了するようにしたいのですが、 WebBrowserEvents
のイベントを取得するような方法しかないのでしょうか?



493:デフォルトの名無しさん
08/06/07 17:33:24
ローカルにある js ファイル ページ表示後に実行したいので、
DWebBrowserEvents の Document Complete 後に
Document に script タグを追加しようとしているのですが、
追加されません。

このやり方だとだめなのでしょうか?

どこかにサンプルがあったりしますか?



494:デフォルトの名無しさん
08/06/13 19:11:21
Win32APIすれから来ました


HTMLを解析したいのでIHTMLDocument2を使おうと思っています

CComPtr<IHTMLDocument2> aDoc;
aDoc.CoCreateinstance(CLSID_HTMLDOCUMENT);
aDoc->put_URL(CComBSTR("URLリンク(~)")); //URLの読み込み(のつもり)
aDoc->get_images()


この put_URL を使うとブラウザで引数のURLを開いてしまい、また、get_imagesで取得したイメージコレクションのサイズが0になっています。
まず、「ブラウザを開かないでHTMLを解析したい」のと、「get_images で取得できていない」理由がよく解りません。

コマンドラインから使うツールのつもりなのでCUIの方がうれしいのですが、ダイアログかなにかで表示させる必要があるのでしょうか?
#イメージとしてはURLを引数で渡すとそのページのIMG src="***" を抽出するプログラムです。

495:デフォルトの名無しさん
08/06/13 19:23:39
>>494
ここにサンプルがあったよ
URLリンク(d.hatena.ne.jp)

496:デフォルトの名無しさん
08/07/23 00:24:40
IWebBrowser2から作ったIEコンポーネントで、フラッシュゲームのページでゲームのキー入力が
効きません助けてください!
IOleInPlaceActiveObject::TranslateAcceleratorもメッセージループ内に入っています!

497:デフォルトの名無しさん
08/07/23 09:21:35
そういや俺もニコニコとかのフラッシュ使ったページでキー入力効かなかったことがあったな。
どうやって解決したか思い出したら書き込むよ。

498:デフォルトの名無しさん
08/07/23 11:55:03
質問です。
戻る、進むことが出来るか否かを判断するにはどうすればいいんですか?
IWebBrower2のメソッドにそれらしき関数が見当たらなかったんだけど

499:デフォルトの名無しさん
08/07/23 20:05:14
DWebBrowserEvents2のCommandStateChangeかなにか

500:デフォルトの名無しさん
08/07/24 18:42:51
>>499
遅レスですがありがとうございました!


501:デフォルトの名無しさん
08/07/24 20:13:24
VC+ATLでタブブラウザっぽいものを作っています。
DWebBrowserEvents2のDISPID_NEWWINDOW2イベントで、
新しく開く遷移先のアドレスを知るためにはどうしたらいいんですか?
OnNewWindow2のハンドラでIEが立ち上がるのをキャンセルするまでは分かったんで巣が。。
Donutのソースみたけどいまいち分かりませんでした・・・


502:デフォルトの名無しさん
08/07/25 19:21:06
NewWindow3にしちゃうのは?

503:デフォルトの名無しさん
08/07/28 14:53:44
WSH/VBScriptからNewWindow?でcancelできない?

504:デフォルトの名無しさん
08/08/08 20:08:34
IE6が入っているPCでは問題なく動作しているプログラムが
IE7が入っているPCで正しい動作をしてくれません。

URLリンク(www.nitoyon.com)
このサイトを参考にC++(VC++)でIEコンポーネントを呼び出しています。

調べてみると、どうやらIE7でNavigate2を呼び出すと
正しくページに移動できないみたいですね。
色々調べてみたんですけど、VC++でのIEコンポーネントの使用で
IE7に対応させるような方法が分かりません。

IE7環境でVC++からIEコンポーネントを呼び出して
正しくページ移動できるようなプログラムは可能でしょうか。

505:デフォルトの名無しさん
08/08/09 16:49:59
しらんけど↓でなんとかならんかのお
Microsoft Web Browserコントロールのセキュリティを制御する:CodeZine


506:デフォルトの名無しさん
08/08/09 18:40:03
ページから移動するんじゃなくて、ページごとに作り直すといいんじゃない?

507:デフォルトの名無しさん
08/08/27 22:13:09
>>504
AtlAxCreateControlExを使用した方法だとうまくいきますよ。



508:507
08/08/27 22:19:03
>>504の詳細を聞かずにレスしたので、思っているのとは違う結果になるかもしれない。
補足すると、タブを使用しない。キオスク端末見たいなことをやりたければ、
AtlAxCreateControlExを使用した方法で作れます。



509:デフォルトの名無しさん
08/08/31 16:14:38
IE7でアクティブなタブがshellwindowsのどれか、わかりますか?

510:デフォルトの名無しさん
08/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にアクセスできるでしょうか。

511:デフォルトの名無しさん
08/09/21 12:02:52
>>510
厳密に調査したわけではないが、アクセスタイミングによるものだと思う。
windowオブジェクトは、初期状態で存在しているため、
直にアクセスできるのだと思われる。
全てのイベントを拾って、ポーリングすればアクセスできるタイミングが分かるはず。

 試しに html側 head内にてvar i=1000を定義、body onloadにて、
iを初期値と比較して結果を出す関数を作成。
全てのイベントを拾って、GetDispID( 変数名, fdexNameCaseInsensitive, &dispID )
を実行して、DISPID_UNKNOWN != dispIDが成立したら関数InvokeExにて値を変更したら
onload関数の結果が変わるのを確認した。


512:デフォルトの名無しさん
08/09/26 12:43:09
javaのwin32oleでブラウザ作ってるんですが
表示中のHTMLの任意のタグの内容を取る方法って何ですかね?
例えばクリック→srcElement取得ってどうやったらいいのか・・・。

513:デフォルトの名無しさん
08/09/27 01:17:13
win32oleを使用したことが無いので詳しくは分からないが、IHTMLDocument2のI/Fが取れれば、
メンバ関数elementFromPointでできると思う。


514:デフォルトの名無しさん
08/09/27 22:09:26
IE7 + Vista + 保護モードだと、BHOからファイル書き込みが
所定のパスにできないですよね。
これを解決しようと奮起してます。
ファイル書き込み部分をCOM化しようとしてるんですが、
どうにもうまくいきません。
URLリンク(msdn.microsoft.com)
ここを読んだんですけど、
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
08/09/27 22:11:01
ファイル書き込みのCOMはBHOと同じDLLに含まれてます。
ファイル書き込みのCOMを別のEXEサーバーにおいて、
BHOから呼び出したんですが、COM生成はできても、
ちょっとするとEXEサーバーから勝手に切断されてしまいます。
どうしていいのか、さっぱりわかりません・・・

516:512
08/09/30 09:54:56
>>513
ありがとうございます
やってみます

517:hiro
08/10/08 14:47:16
こんにちは。
URLリンク(www.nitoyon.com)
のサンプルコードを落として VS.net 2003 Standardで
開いてビルド実行、アドレスバーに打ち込んでGOを押しても
メッセージが出て(atlcomcli.h Line148)で
実行時にエラーになります。
comは初心者でよく分かりません。
どなたか対処法をご存知ないでしょうか?
どうかよろしくお願いします。

518:デフォルトの名無しさん
08/10/08 17:40:03
>>517
そこの「VC++.NETでの注意点」ってとこ読んだか?

519:hiro
08/10/08 18:50:31
はい、読みました。

昔会社でやってた頃、VC6.0のときは作動できたのですが、
なぜか自宅のVC++.net 2003 Standardではエラーが出るのです。


520:デフォルトの名無しさん
08/10/09 16:40:56
>>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 );
}
省略

521:デフォルトの名無しさん
08/10/11 22:58:55
html 関連の質問です。
VC++ 2005、WinXPでプログラムを組んでいますが、あるhtmlファイルからanchorタグを読み込み、リンク先のページを取得したいと思います。
一々、自作のライブラリでリンク先を検出するようだと、作成時間がかかって仕方ないので、どなたか、htmlをパースしてリンク先のアドレスを取得できるような
ライブラリや関数などをご存知の方、教えていただけないでしょうか?


----

c++相談室から誘導されてきました。
よろしくお願いします。

522:デフォルトの名無しさん
08/10/11 23:10:07
その程度の用途でIEコンポーネントなんか使ったら余計時間かかる気がするが。
正規表現かなんかで抽出したほうがはやくね?

523:デフォルトの名無しさん
08/10/11 23:18:16
マジっすか……
正規表現だとboost辺りかな……

とりあえず、boost使ってみることにします。

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

524:デフォルトの名無しさん
08/10/12 13:17:44
BHOを作ってるのだが、
VSのプロジェクトのプロパティ>構成プロパティ>デバッグ>コマンド
にiexplorer.exeのパス書いて、デバッグ実行すると、
IEが起動して自動的にアタッチしてくれる。
それはいいんだが、なぜかそうやって起動するとIE7+Vistaでの保護モードが無効になってしまう。
その状態でインターネットオプション見ても保護モードにチェックは入ってるのに。
普通にIE起動したら保護モード。
誰か理由説明できる人いる?

525:デフォルトの名無しさん
08/10/12 14:12:10
その状態で2ch見ても保護モードにならんの?

526:デフォルトの名無しさん
08/11/12 03:01:30
IOleCommandTargetとかIDocHostUIHandler辺りを使ってIEコンポのカスタマイズやってるんだが、
どうもうまくいかないのでレジストリのキー検索してみた。
するとIDocHostUIHandlerが発見できない。(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A)
OleViewでみてもやっぱりない。
これはウチのレジストリが壊れてる?それともこれが普通で他に原因がある?
PC2台(Pro,Home)とも同じ状況なんで判断が付かない。

環境は XP SP2(一台はSP1から更新、もう一台はSP2デフォ) / IE7(6から更新) / .NET2.0
参考サイトはこの辺 URLリンク(msdn.microsoft.com)(VS.85).aspx

527:デフォルトの名無しさん
08/11/12 03:54:47
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:もう見てないよな?
08/11/14 23:05:07
>>523
> マジっすか……
> 正規表現だとboost辺りかな……
>
VCならRegExpをCOM経由で使えば正規表現がつかえるらしい

VCで正規表現 (要IE5.5以上)
URLリンク(page.freett.com)

「IE5.5以上」なんで条件を満たしていないWindowなんてあるの?

529:デフォルトの名無しさん
08/11/14 23:33:38
素のWindows2000

530:デフォルトの名無しさん
08/11/15 18:48:42
RegExpはVBScript 5.0だろ
IE5.0だろ
素のWindows2000だろ

531:デフォルトの名無しさん
08/11/15 21:27:32
鬼車使っとけ

532:デフォルトの名無しさん
08/11/20 10:06:31
IDocHostUIHandlerを実装したクラスを適用させるにはどうすりゃいいんでしょうか?
NavigateComplete2でSetUIHandlerはイクないみたいなことが色々書いてありますし、
それでは初めてのNavigateの時にはXPスタイルを適用できないみたいですし・・・
GWL_USERDATAをGetWindowLongでIAxWinHostWindowを取得してSetExternalUIHandlerでも出来ないことも無いですが、
D&Dが使えなくなるっぽいなのでこちらもだめみたいです

533:デフォルトの名無しさん
08/11/20 10:55:09
MFCのソースでも見ればいいんじゃね? Platform SDKに入ってなかったか。

534:532
08/11/20 11:41:01
MFCの環境が無いので見れません
ごめんなさい

535:デフォルトの名無しさん
08/11/20 11:57:27
>>534
>>533は「無償配布されてるPlatform SDKを入れてみろ」って言ってるんだと。

536:デフォルトの名無しさん
08/11/20 12:06:41
>>535
Platform SDKは既に入れてありますが、MFCのソースはどこにありますでしょうか?
mfcディレクトリにはヘッダしか見受けられませんが・・・

537:デフォルトの名無しさん
08/11/20 13:02:22
src\mfcにないならないんじゃない?

538:532
08/11/20 13:23:30
src\mfcを検索してみましたが、IDocHostUIHandlerの記述はないようです

本題に戻って、お願いします

539:デフォルトの名無しさん
08/11/20 16:57:23
>>538
URLリンク(msdn.microsoft.com)

540:532
08/11/20 17:24:56
>>539
こんな方法で出来るとは・・・
神様ありがとうございます

541:sdaf
08/11/26 16:16:56
adsf

542:デフォルトの名無しさん
09/01/08 18:22:37
ie7でShellWindowsの中からactiveなものを見つけることはできないっすか?

543:デフォルトの名無しさん
09/01/11 15:33:39
MFC(VC++6.0)のCHtmlViewで、右スクロールバーの「現在のスクロール位置」の取得
方法が分かる方はいらっしゃいますでしょうか?

いろいろ調べて、試してみたりしたのですが、どうしてもうまくいかないのです…


544:デフォルトの名無しさん
09/01/11 19:13:07
VS2008 MFCにてIEコンポーネントを使用して自動巡回ソフトを作りたいと
考えています。
IEコンポで指定のページまでは簡単に表示出来たのですが、
フォームに文字(ID/PASS)を入力したり、ボタンをクリックしたりする
のはどうやったらいいのでしょうか?

参考になるソースなどあるサイトなどあったら教えて下さい。

545:デフォルトの名無しさん
09/01/11 20:12:13
まあIHTMLDocument*あたりからDOM経由すればそういうことはできるが、
普通はそういう面倒なことはせずに直接自分でフォーム送信時に送られるリクエストを作成するだろうな。

546:デフォルトの名無しさん
09/01/16 23:22:51
>>517
亀だが「AtlAxWin」の部分をVSのVerにあわせてみては?

参考URL
URLリンク(fssblog.blog50.fc2.com)

547:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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;
上記のインターフェース使って
やる・・・・


549:デフォルトの名無しさん
09/02/18 13:55:20
>>546
>>517 じゃないけど助かりました!

550:デフォルトの名無しさん
09/03/16 02:31:52
そうか

551:デフォルトの名無しさん
09/03/22 02:24:55
IE8になって、IEコンポーネントを使って値を設定するときのセキュリティの変更があったようです
INPUT TYPE="FILE"
に設定するのに今までフォーカスを当ててからSendKeyを使っていたのですが、どうやら駄目になった模様・・・

解決方法はあるのでしょうか

552:デフォルトの名無しさん
09/03/22 21:29:34
知らんけどタイミングが合ってないだけじゃないのか?

553:デフォルトの名無しさん
09/03/23 10:21:37
能無しはけーん

554:デフォルトの名無しさん
09/03/23 22:46:49
それはそれは。。。がんばって!


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