tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6.0 WebBrowserについて
記事No12469
投稿日: 2008/06/09(Mon) 10:43
投稿者ヒロキ

[ツリー表示へ]
タイトルRe: VB6.0 WebBrowserについて
記事No12470
投稿日: 2008/06/09(Mon) 10:59
投稿者魔界の仮面弁士
> 「Ctrl+P」を押しても印刷ダイアログを開かないようにしたいのですが、なにかいい方法はあるでしょうか。

成功法でやるのであれば、IDocHostUIHandler インターフェイスの実装で対応できます。
実装サンプルとしてはこのあたり。
http://support.microsoft.com/kb/183235/en-us


上記サンプルの利用例

Option Explicit
Private WBC As WBCustomizer
Private Sub Form_Load()
    Set WBC = New WBCustomizer
    Set WBC.WebBrowser = Me.WebBrowser1
    WBC.EnableAccelerator vbKeyP, vbKeyControl, False   'Ctrl + P を無効化
End Sub

[ツリー表示へ]
タイトルRe^2: VB6.0 WebBrowserについて
記事No12473
投稿日: 2008/06/09(Mon) 13:48
投稿者ヒロキ
> > 「Ctrl+P」を押しても印刷ダイアログを開かないようにしたいのですが、なにかいい方法はあるでしょうか。
>
> 成功法でやるのであれば、IDocHostUIHandler インターフェイスの実装で対応できます。
> 実装サンプルとしてはこのあたり。
> http://support.microsoft.com/kb/183235/en-us
>
>
> 上記サンプルの利用例
>
> Option Explicit
> Private WBC As WBCustomizer
> Private Sub Form_Load()
>     Set WBC = New WBCustomizer
>     Set WBC.WebBrowser = Me.WebBrowser1
>     WBC.EnableAccelerator vbKeyP, vbKeyControl, False   'Ctrl + P を無効化
> End Sub
ご返信ありがとうございます。
不躾ですが、
このDLLはサポート対象なのでしょうか?
または、ソースが公開されていれば使用できるのですが。。

[ツリー表示へ]
タイトルRe^3: VB6.0 WebBrowserについて
記事No12477
投稿日: 2008/06/09(Mon) 17:57
投稿者魔界の仮面弁士
> このDLLはサポート対象なのでしょうか?
README.TXT の 9 行目 および 27 行目をお読みください。

> または、ソースが公開されていれば使用できるのですが。。
見ての通りです。

[ツリー表示へ]
タイトルRe^4: VB6.0 WebBrowserについて
記事No12478
投稿日: 2008/06/09(Mon) 18:47
投稿者ヒロキ
> > ?

[ツリー表示へ]
タイトルRe^5: VB6.0 WebBrowserについて
記事No12479
投稿日: 2008/06/09(Mon) 19:33
投稿者魔界の仮面弁士
> WebBrowserコントロールのハンドルはとれますでしょうか?

http://support.microsoft.com/kb/244310/ja

[ツリー表示へ]
タイトルRe^6: VB6.0 WebBrowserについて
記事No12501
投稿日: 2008/06/10(Tue) 13:31
投稿者ヒロキ
> > WebBrowserコントロールのハンドルはとれますでしょうか?
>
> http://support.microsoft.com/kb/244310/ja

ありがとうございます。
上記サイトの一文で
Public Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
とありますが、

GetBrowserWindowを呼ぶ場合、
hwndBrowserContainerの部分にはなにを入れればよいのでしょうか。
Webbrowser.container.hwndですか?

[ツリー表示へ]
タイトルRe^7: VB6.0 WebBrowserについて
記事No12502
投稿日: 2008/06/10(Tue) 14:07
投稿者魔界の仮面弁士
> Webbrowser.container.hwndですか?

本来はそのハズですが…元のコードのままだと、コンテナの下に
WebBrowser しか無かった場合に、正しく取得できないですね。

下記のように変更してみてください。

Public Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
    Dim RetVal As Long
    Dim hwndPeer As Long
    Dim ClassString As String

    hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
    Do Until hwndPeer = 0
        ClassString = String(4096, 0)
        RetVal = GetClassName(hwndPeer, ClassString, 4096)
        If Left(ClassString, InStr(1, ClassString & vbNullChar, vbNullChar) - 1) = "Shell Embedding" Then
            Exit Do
        End If
        hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
    Loop

    GetBrowserWindow = hwndPeer
End Function

[ツリー表示へ]
タイトルRe^8: VB6.0 WebBrowserについて
記事No12505
投稿日: 2008/06/10(Tue) 16:29
投稿者ヒロキ
> > Webbrowser.container.hwndですか?
>
> 本来はそのハズですが…元のコードのままだと、コンテナの下に
> WebBrowser しか無かった場合に、正しく取得できないですね。
>
> 下記のように変更してみてください。
>
> Public Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
>     Dim RetVal As Long
>     Dim hwndPeer As Long
>     Dim ClassString As String
>
>     hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
>     Do Until hwndPeer = 0
>         ClassString = String(4096, 0)
>         RetVal = GetClassName(hwndPeer, ClassString, 4096)
>         If Left(ClassString, InStr(1, ClassString & vbNullChar, vbNullChar) - 1) = "Shell Embedding" Then
>             Exit Do
>         End If
>         hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
>     Loop
>
>     GetBrowserWindow = hwndPeer
> End Function

お手数おかけしました。ありがとうございます。

WebBrowser上でCtrl+Pの制御を行いたいのですが、VBでは無理ですか。

[ツリー表示へ]
タイトルRe^9: VB6.0 WebBrowserについて
記事No12506
投稿日: 2008/06/10(Tue) 16:39
投稿者ヒロキ


[ツリー表示へ]
タイトルRe^10: VB6.0 WebBrowserについて
記事No12509
投稿日: 2008/06/10(Tue) 20:46
投稿者魔界の仮面弁士
> WBCustomizer.Dllは使えないということになったので

その理由は教えて頂けないのでしょうか?

情報を提示した後で、条件が後出しにされたり、理由無しに却下されたりしてしまうと、
情報提供側としても疲れてしまうのですけれども。(^^;


> WebBrowser上でCtrl+Pの制御を行いたいのですが、VBでは無理ですか。
IDocHostUIHandler を用いた方法が、どうしても使えない事情があるのなら、
HTML DOM の方から取得するという方法がありますね。

HTML の内容が更新されるたびに、オブジェクトの再取得が発生するので、
タイミング等の問題もあって、さほど推奨できる手法では無いですけれども。
'----
Option Explicit

Private WithEvents Doc As MSHTML.HTMLDocument
Private WithEvents Win As MSHTML.HTMLWindow2

Private Sub Form_Load()
    WebBrowser1.Navigate "http://www.google.com"
End Sub

Private Sub Doc_onkeydown()
    With Win.event
        If .ctrlKey And .keyCode = vbKeyP Then
            .keyCode = 0
            .returnValue = False
            .cancelBubble = True
        End If
    End With
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set Doc = pDisp.Document
    Set Win = Doc.parentWindow
End Sub

[ツリー表示へ]
タイトルRe^11: VB6.0 WebBrowserについて
記事No12513
投稿日: 2008/06/11(Wed) 11:07
投稿者ヒロキ

> '----
> Option Explicit
>
> Private WithEvents Doc As MSHTML.HTMLDocument
> Private WithEvents Win As MSHTML.HTMLWindow2
>
> Private Sub Form_Load()
>     WebBrowser1.Navigate "http://www.google.com"
> End Sub
>

> Private Sub Doc_onkeydown()
>     With Win.event
>         If .ctrlKey And .keyCode = vbKeyP Then
>             .keyCode = 0
>             .returnValue = False
>             .cancelBubble = True
>         End If
>     End With
> End Sub
>
> Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
>     Set Doc = pDisp.Document
>     Set Win = Doc.parentWindow
> End Sub

[ツリー表示へ]
タイトルRe^12: VB6.0 WebBrowserについて
記事No12518
投稿日: 2008/06/11(Wed) 17:17
投稿者ヒロキ

> すみません、またなにかありましたら宜しくお願いします。

すみません、まだありました。

IEのフラッシュ上では右クリック制御できますか?
通常はDoc_oncontextmenu で制御できますが。

[ツリー表示へ]
タイトルRe^13: VB6.0 WebBrowserについて
記事No12519
投稿日: 2008/06/11(Wed) 19:25
投稿者魔界の仮面弁士
> > SPに入ってないというのが引っかかってるようです。
確かに、Service Pack にソースコードの類は含まれないでしょうけれども、
それは MSHTML を使った場合であっても、同じことなのでは無いでしょうか。

> > なにかあった時の対応がいるようなのです。
実装例(ソースコードのサンプル)なのですから、どうとでも対応できそうに思えますが…。

もっとも、どのようなサンプルを利用するにしても、そのソースの意味を
理解している人が居ない場合は、トラブル対応はできないでしょうけれども。(^^;


> IEのフラッシュ上では右クリック制御できますか?
ヒントは、このあたり。
http://faq.shtml.jp/shtml_memo/flash.html

上記のサイトで得た情報を元にして、VB 側で表現するとこんな感じでしょうか。


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Dim o As Object     'As MSHTML.HTMLObjectElement
    For Each o In pDisp.Document.getElementsByTagName("OBJECT")
        If LCase(o.classid) = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" Then
            o.object.Menu = False
        End If
    Next
End Sub

[ツリー表示へ]