WebbrowserでExcelのキーを抑止するには

解決


ちゃま  2009-06-24 13:22:31  No: 142112

WinXP-SP3+VB6+Excel2003の環境です。

現在form上にWebbrowserコントロールを使用してExcelを表示しています。
その際「Ctrl+P」や右クリックを抑止させるため、
「WBCustomizer」を使用してみましたが抑止できず印刷ダイアログが表示されて困っています。(htmlを表示する際には制御できています)

VBAでExel側で抑止できることはわかっているのですが、
セキュリティの関係上使用できません。

なんとか制御できないものでしょうか。

参考にしたサイト、過去ログ
http://support.microsoft.com/kb/183235/en-us
http://madia.world.coocan.jp/vb/vb_bbs/200506/200506_05060099.html

以下ソースです。

Private WBC As WBCustomizer

Private Sub Command1_Click()
   Dim sFileName As String
   'sFileName = "http://www.google.co.jp/" '←htmlは制御できる
   sFileName = "C:\sample.xls"

   If Len(sFileName) Then
      Set oDocument = Nothing
      WebBrowser1.Visible = True
      WebBrowser1.Navigate sFileName
   End If
End Sub

Private Sub Form_Load()
    Set WBC = New WBCustomizer
    WBC.EnableContextMenus = False                      '右クリックの抑止
    'WBC.EnableAllAccelerators = False
    WBC.EnableAccelerator vbKeyP, vbKeyControl, False   'Ctrl + P を無効化

    Set WBC.WebBrowser = WebBrowser1

End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
URL As Variant)
   On Error Resume Next
   Set oDocument = Nothing
   Set oDocument = pDisp.Document

End Sub


VB6ヶ月目  2009-06-24 23:35:03  No: 142113

ほぼ同じ環境(エクセルだけ2000です)だったので、テストしてみましたが、これは難しいのではないでしょうか?
理由としては以下のとおりです。

・WebBrowserコントロールのブラウザ機能でエクセルを呼んだとしても、本体のエクセルも起動している。加えてコントロールがエクセルファイルを呼び出した状態のときは、本体のエクセルもロックされた状態になっている(すでに利用していいのか怪しい状態)。
ここからは推測になるが、ブラウザからのエクセルへのキーメッセージはエクセル本体がフックしており、もっと上のほうで(ウィンドウズ本体などから)フックしない限り、エクセルへのキーメッセージは奪えないのでは?(上のほうからメッセージを奪うのは、フルスクリーンアプリでもない限りお勧めできません…)

・VBのフォームから試しにWebBrowserのコントロールのキーイベントをKeyPreviewで奪ってみたが、WebBrowser上のデータがエクセルでフォーカス時の時はそもそもキーイベント自体が呼び出されない。

私はここで断念しました。

補注 元バグもありうるかなと思って、元ソースのWBCustomizerObj.cppもざっとみてみましたが、やはり問題なさげでした(関数CWBCustomizer::AcceleratorDisabledがコントロールのキーチェック関数だと思われます)。


ちゃま  2009-06-25 06:25:37  No: 142114

Cはさっぱりなのですが、元ソースまで調べて頂きありがとうございます。

お察しの通り、htmlを表示する場合と、Excelを表示するのは
全く別のようですね。

どなたか実現された方いらっしゃらないでしょうか。


subaru  2009-06-26 23:39:29  No: 142115

DocumentCompleteイベントで

    WebBrowser1.Document.Application.OnKey "^{p}", ""

としてみるとか。


ちゃま  2009-06-30 20:17:10  No: 142116

なかばあきらめていたのですが、

NavigateComplete2イベント内に一文をいれてみたところ
なんとちゃんと抑止できるようになりました。
(DocumentCompleteイベントでは使用できませんでした。)

WebBrowser1.Document.Application.OnKey "^{p}", ""

今まで試行錯誤していたのが信じられません。

subaruさん感謝です。

解決です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加