- PR -

Webbrowserでの制御方法について

1
投稿者投稿内容
ハム
会議室デビュー日: 2004/09/07
投稿数: 7
投稿日時: 2004-10-27 13:44
お世話になります。
VB.netでのWebbrowserの機能について質問があります

現在、WebbrowserコントロールをVB画面に貼り付け
Webbrowser中に表示されているHTMLのボタン操作を
VB側から検知する仕組みを検討しています。

ex)パスワード入力画面
 HTMLで作成されたパスワード入力画面をWebbrowserに表示させ
 パスワード入力後に、パスワードをVBで取得・暗号化し、WEBサーバに
 投げる。この際、ボタン押下後にボタンの内容が変わることはありません
 (「決定」押下→「確定」等)

上記、機能を満たそうとし、ボタン押下イベントをイベントフック(ハンドラー)
で実現したのですが、クリックしたイベントは拾えますが、パスワードを
入力するInputTAGにフォーカスが移らずパスワードを入力することが
できません。

HTMLの表示に関しては、一般のIEと同様にし、ボタンイベントをVB側で
取得することは可能なのでしょうか。
申し訳ありませんが、知っている方がおられましたら教えてください


以上
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-10-27 14:04
引用:

HTMLの表示に関しては、一般のIEと同様にし、ボタンイベントをVB側で
取得することは可能なのでしょうか。



可能です。

大まかな手順は以下のとおりです。

(1) IOleClientSite, IDocHostUIHandler を実装した COM オブジェクトを作成する。
(2) ↑をブラウザコントロールに IOleObject::SetClientSite() する。
(3) IDocHostUIHandlere::GetExternal() で、ディスパッチオブジェクトの参照を返す。
(4) ↑が windows.external として公開される。

詳細は、MSDN の Programing and Reusing the Broweser 配下のドキュメントを参照してください。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ハム
会議室デビュー日: 2004/09/07
投稿数: 7
投稿日時: 2004-10-27 16:48

ご教授ありがとうございました。

申し訳ないのですが、まだ不明な点がありまして・・

当方の環境は、VB.netなのですが、
IOleObject::SetClientSite()
は、どういう手続きで利用できるものなのでしょうか。

今こちらの環境では
AxWebBrowserを用いておこなっているのですが、
そこから利用することも可能でしょうか。

よろしければ、引き続きどなたかご教授をお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-10-27 20:07
VB6で作ったサンプルです。
おそらくVB.NETに移植できるでしょう。

Microsoft Internet Contorls(shdocvm.dll)
Microsoft HTML Object Library(mshtml.tlb)
を参照して..

Option Explicit

Private WithEvents IE As InternetExplorer
Private WithEvents F As HTMLFormElement

Private Sub Form_Click()

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate2 "http://www.google.co.jp/"
IE.Visible = True
End Sub

Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
If (IE.LocationURL = "http://www.google.co.jp/") Then Set F = IE.Document.Forms(0) 
End Sub

Private Function F_onsubmit() As Boolean
MsgBox F.elements("q").Value
F_onsubmit = True
End Function

参考
http://www.ken3.org/cgi-bin/group/vba_ie.asp


[ メッセージ編集済み 編集者: todo 編集日時 2004-10-27 20:19 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-10-27 20:41
引用:

当方の環境は、VB.netなのですが、
IOleObject::SetClientSite()
は、どういう手続きで利用できるものなのでしょうか。



MSDN を参考に IOleObject インターフェースのマネージ定義を自分で書くか、

P/INVOKE.NET
http://www.pinvoke.net/

などを検索して、誰かが書いたものを探します。

IOleObject のマネージ定義があれば、

AxWebBroweser axWebBrowser = new AxWebBrowser();

のような時、AxWebBrowser が実装する IOleObject インターフェースの参照は

IOleObject oleObject = axWebBrowser as IOleObject

で取得することができます。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
1

スキルアップ/キャリアアップ(JOB@IT)