IEをFullScreenで表示して、PopupMenuで制御

解決


とおりすがり  2003-12-16 20:05:51  No: 80935  IP: [192.*.*.*]

環境:VB.NET 2003 & Window2000 SP3 IE6.0SP1
IEをCreateObject("InternetExplorer.application")で起動して
objInetExp.FullScreen = Trueで表示。マウスでスタートメニューも
タスクバーも選択できない状態になってます。

ポップアップメニューを表示して、IEを終了させたいです。
また、メニュー以外にも
CreateObject("Shell.Application").ToggleDesktopで切り替える
手段を思いつきましたが、とにかくイベントをアプリに通知する手段
がありません。

どなたか教えてください。

編集 削除
魔界の仮面弁士  2003-12-16 22:31:26  No: 80936  IP: [192.*.*.*]

> とにかくイベントをアプリに通知する手段がありません。

DocumentプロパティをIHTMLDocumentインターフェイスで受けてやれば、
任意要素のイベントを取得できると思います。

# VB.NETでやった事はありませんが、VB6ではこの方法で、DHTMLの
# onclickイベントやoncontextmenuイベントなどを受信できています。

編集 削除
とおりすがり  2003-12-17 10:30:29  No: 80937  IP: [192.*.*.*]

魔界の仮面弁士どの。回答ありがとうござい!

しかし、具体的な方法がわからず過去ログを参照しましたが、
VBからIEを操作するようなQ&Aばかりで、私の質問とどうような
物がなくて困っとります。すいません。よろしくお願いします。

とりあえず。MSHTML.TLBを参照設定したんですが..

編集 削除
魔界の仮面弁士  2003-12-17 10:45:00  No: 80938  IP: [192.*.*.*]

VB6の場合は、デフォルトメソッドを持ったクラスモジュールを定義して、
それを 「Set IE.document.onclick = New Class1」などとする事で、
onclick発生時に、デフォルトメソッドが呼び出されるようになっていました。
(ただ、VB.NETのクラスは仕組みが違うので、この手法は使えないと予想しています)

> とりあえず。MSHTML.TLBを参照設定したんですが..
VB6では、HTMLDocument型とか、あるいはHTMLBodyElement型などを
WithEvents付きの変数として宣言しておく事で、各種イベントを
取得する事が出来ていました。VB.NETも、多分同様だと思います。
(IEのDocumentCompleteイベントが発生した時に、それらのWithEvents変数に、
 IE.DocumentやIE.Document.body などを代入する必要があります)

編集 削除
とおりすがり  2003-12-17 18:26:42  No: 80939  IP: [192.*.*.*]

魔界の仮面弁士さん。ありがとうございました。

教えていただいた形で実現しました。しかし、ポップアップメニューの使い方
がわからず、MessageBoxで確認メッセージを出力してIEを操作
する事にしてしまいました。

しかし、マウスのイベントをTrackPopupMenuで送ったら、どこで取得
するんでしょう?以前、このプロジェクトとは別に
Formクラスの親クラスイベントWinProcメソッドを使ったら
アプリが立ち上がらなくなった事があったもので..

' InternetExplorerのイベント
Friend WithEvents IE As New SHDocVw.InternetExplorer
' IEで読み込んだドキュメントからのイベント
Friend WithEvents DocEvent As mshtml.HTMLDocumentEvents_Event

Private Sub IE_DocumentComplete(ByVal pDisp As Object, ByRef url As Object) Handles IE.DocumentComplete
   ' ドキュメントを渡す
   DocEvent = IE.Document
End Sub

Private Function DocEvent_ondbclick() As Boolean Handles DocEvent.ondblclick
   Dim ret As DialogResult
ret = MessageBox.Show()        
If ret = DialogResult.OK Then
   ' IEを閉じる
End If
End Function

編集 削除
魔界の仮面弁士  2003-12-17 23:04:36  No: 80940  IP: [192.*.*.*]

> ポップアップメニューの使い方がわからず、
使うとすれば、popupオブジェクトですかね。
windowオブジェクトのcreatePopupメソッドで生成できます。

# 私自身は、VBScript5.6から popupメソッドを使った事はあるものの、
# VB6やVB.NETから利用した事はありませんが……まぁ、多分使えるでしょう(^^;)

編集 削除
とおりすがり  2003-12-18 19:15:40  No: 80941  IP: [192.*.*.*]

うう..windowオブジェクトがどこの名前空間にあるのかも
わかりません。誰かおしえて?

編集 削除
魔界の仮面弁士  2003-12-18 19:54:15  No: 80942  IP: [192.*.*.*]

windowオブジェクトは、documentオブジェクトの
parentWindowプロパティにて取得する事ができます。

その後は、window.createPopupメソッドでpopupオブジェクトを生成し、
そのpopup.documentプロパティに、メニュー項目となるHTML要素を記載する、と。

編集 削除
とおりすがり  2003-12-20 11:06:20  No: 80943  IP: [192.*.*.*]

教えてください!  
以下のような物を書いたのですが、document変数をウォッチすると
ParentWindowが内部キャストエラーになっているのですが..
Object型に代入すると、必要なメソッドがそのクラスに存在するのか分からない
もので..

Private HTMLWin As mshtml.HTMLWindow2
Private Sub IE_DocumentComplete(ByVal pDisp As Object, ByRef url As Object) Handles IE.DocumentComplete
   ' ドキュメントを渡す
   HTMLDocEvent = IE.Document
   Dim document As mshtml.IHTMLDocument = IE.Document ' ← 問題あり?
   HTMLWin = document.parentWindow
End Sub

Private Function HTMLDocEvent_ondbclick() As Boolean Handles HTMLDocEvent.ondblclick
   ' ポップアップメニューを生成
   Dim popup As mshtml.HTMLPopup = HTMLWin.createPopup
   Dim popupBody As mshtmt.?? '忘れちゃいました
   popupBody.innerHTML = "<b>いやん</b>"
   ' ポップアップメニューを表示
   popup.show(X,Y,100,200,popupBody)
End Function

編集 削除
とおりすがり  2003-12-22 10:47:45  No: 80944  IP: [192.*.*.*]

すいません。新規に質問を書きます。
「解決」ってしてたら回答なんかありませんよね..

編集 削除