IEコンポーネントを使い倒すスレ Ver.2at TECH
IEコンポーネントを使い倒すスレ Ver.2 - 暇つぶし2ch482:デフォルトの名無しさん
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