Webbrowserでコピー不可にしたい

解決


ABC  2005-12-29 04:37:13  No: 129299

VB6.0でタイトルのようなことをしたいのですが、Webbrowserコントロール内に表示された文字をマウスでドラッグ(反転表示?)して
ドラッグされた部分をマウスでドラッグ&ドロップでテキストエディタなどに入れると選択されているテキストがコピー?されてしまいます。

この動作を禁止したいのですが、どうすれば防ぐことができるのでしょうか?

Webbrowser1_DragDrop
Webbrowser1_DragOver
ではイベントを取得できませんでした。

また、
Webbrowser1_GotFocus
で別コントロールにSetFocusしてみましたが、選択できてしまいます。

よろしくお願いします。


名無し  2005-12-29 14:33:40  No: 129300

右クリックの監視+Ctrlキーの監視でやってみたらどうでしょう?


ABC  2005-12-29 19:06:55  No: 129301

>名無しさん
有難うございます。

説明不足で申し訳なかったのですが、
・右クリック禁止
・Ctrl+C禁止
はすでに完成していて、最初の質問内容でもテキストがコピーされてしまうことに気が付き
そこの制御方法が思いつかなかったので質問しました。

よろしくお願いします。


魔界の仮面弁士  2005-12-29 19:20:21  No: 129302

コピーだけが禁止できればよいのでしょうか? それとも、
ドラッグ選択する事を禁止したいのでしょうか?

イベントベースで処理するなら、
  コピー禁止 → onbeforecopy イベントをキャンセルする
  ドラッグ禁止 → onselectstart イベントをキャンセルする
といった方法になります。

http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onbeforecopy.asp
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onselectstart.asp

ちなみに、ブラウザの細かい動作まで本格的に制御しようとなると、
正攻法では、IDocHostUIHandler インターフェイスを VB 側で実装して、
ブラウザからの応答に答えるなど、それなりの手間が必要だったりします。

IDocHostUIHandler 関連
http://msdn.microsoft.com/archive/en-us/samples/internet/browser/WBcustomizer/default.asp
http://msdn.microsoft.com/workshop/browser/hosting/reference/ifaces/idochostuihandler/idochostuihandler.asp
http://support.microsoft.com/kb/183235/en-us


ABC  2005-12-29 20:29:15  No: 129303

>魔界の仮面弁士さん
有難うございます。

コピーを禁止したいのですが、選択部分をテキストエディタなどにドラッグ&ドロップすると同じ文字列が写されてしまうのですがこれはコピーになるのでしょうか?(クリップボードに入っていないようですが)

現状を考えると、選択不可にするのがいいのかなぁと思いまして教えていただいた「onselectstart」について調べてみましたところ
Bodyタグ?に追加することで可能になることがわかり、Webbrowser1_DocumentCompleteイベントに以下のソースを追加しましたが選択不可になりませんでした。

Webbrowser1.Document.body.onselectstart = "return false"

しかし、テキストファイルにWebbrowser1.Document.body.outerhtmlの内容をコピーしてHTML形式で開くと選択不可になっています。

なぜWebbrowserコントロールでは選択不可にならないのでしょうか?

よろしくお願いします。


ABC  2005-12-29 21:04:41  No: 129304

※追記

選択不可に設定したHTMLファイルをWebbrowserに読み込ませてみたところ
選択不可の状態になっていました。

DocumentCompleteで選択不可の設定が反映されていないためということが分かりましたが、反映のさせ方がわかりません。。。


魔界の仮面弁士  2005-12-29 21:09:33  No: 129305

追加の参照設定なしでやりたい場合には、
  Set WebBrowser1.Document.Body.onselectstart = New Class1
のように指定してください。

ここで渡す Class1 は、たとえば
  Option Explicit
  Public Function Hoge() As Variant
    Hoge = False
  End Function
のようなクラスです。単に False を返しているだけですね。

なお、この Hoge メソッドのプロシージャIDを、『(既定値)』に
しておいてください。(プロシージャ属性ダイアログにて変更できます)

ちなみに、MSHTML.TLB を参照設定しても良いなら、こんな感じ。

Private WithEvents Body As MSHTML.HTMLBody
Private Function Body_onselectstart() As Boolean
    Body_onselectstart = False
End Function


ABC  2005-12-29 22:26:59  No: 129306

>魔界の仮面弁士さん

有難うございました。

Classを追加して実現できました。


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

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






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