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
ほぼ同じ環境(エクセルだけ2000です)だったので、テストしてみましたが、これは難しいのではないでしょうか?
理由としては以下のとおりです。
・WebBrowserコントロールのブラウザ機能でエクセルを呼んだとしても、本体のエクセルも起動している。加えてコントロールがエクセルファイルを呼び出した状態のときは、本体のエクセルもロックされた状態になっている(すでに利用していいのか怪しい状態)。
ここからは推測になるが、ブラウザからのエクセルへのキーメッセージはエクセル本体がフックしており、もっと上のほうで(ウィンドウズ本体などから)フックしない限り、エクセルへのキーメッセージは奪えないのでは?(上のほうからメッセージを奪うのは、フルスクリーンアプリでもない限りお勧めできません…)
・VBのフォームから試しにWebBrowserのコントロールのキーイベントをKeyPreviewで奪ってみたが、WebBrowser上のデータがエクセルでフォーカス時の時はそもそもキーイベント自体が呼び出されない。
私はここで断念しました。
補注 元バグもありうるかなと思って、元ソースのWBCustomizerObj.cppもざっとみてみましたが、やはり問題なさげでした(関数CWBCustomizer::AcceleratorDisabledがコントロールのキーチェック関数だと思われます)。
Cはさっぱりなのですが、元ソースまで調べて頂きありがとうございます。
お察しの通り、htmlを表示する場合と、Excelを表示するのは
全く別のようですね。
どなたか実現された方いらっしゃらないでしょうか。
DocumentCompleteイベントで
WebBrowser1.Document.Application.OnKey "^{p}", ""
としてみるとか。
なかばあきらめていたのですが、
NavigateComplete2イベント内に一文をいれてみたところ
なんとちゃんと抑止できるようになりました。
(DocumentCompleteイベントでは使用できませんでした。)
WebBrowser1.Document.Application.OnKey "^{p}", ""
今まで試行錯誤していたのが信じられません。
subaruさん感謝です。
解決です。
ツイート | ![]() |