■80796 / inTopicNo.3) |
Re[1]: WebBrowser上でドラッグできないようにしたい |
□投稿者/ 魔界の仮面弁士 (810回)-(2016/08/11(Thu) 19:35:04)
|
■No80771 (オニオコゼ さん) に返信 > VB2008 Windows7(32bit) 同じ環境が無いため、VB2015/Win10(1607)64bit をベースに回答します。
> 2.WebBrowser上のデータを外部にドラッグ&ドロップすることは > 考えていないので、いっそのこと、WebBrowser上ではドラッグ自体が > できないようにしたいのですが、可能でしょうか?
これでどうでしょう。 選択されたテキストや画像をドラッグすることはできなくなりますが、 範囲選択のためのドラッグ操作は可能にしています。
Private Sub EventCancel(sender As Object, e As EventArgs) Dim win = WebBrowser1.Document.Window.DomWindow Dim ev = win.event ev.cancelBubble = True ev.returnValue = False System.Runtime.InteropServices.Marshal.ReleaseComObject(ev) System.Runtime.InteropServices.Marshal.ReleaseComObject(win) End Sub
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted WebBrowser1.Document.Body.AttachEventHandler("ondragstart", AddressOf ondragstart) 'WebBrowser1.Document.Body.AttachEventHandler("onselectstart", AddressOf EventCancel) End Sub
範囲選択も無効化したい場合は、onselectstart イベントもキャンセルすれば OK です。
> (WebBrowser上の選択範囲をクリップボードにコピーできれば十分と思っています。) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'WebBrowser1.Document.ExecCommand("SelectAll", False, Type.Missing) WebBrowser1.Document.ExecCommand("Copy", False, Type.Missing) End Sub
> 1.WebBrowserで表示されているHTML上の画像をドラッグした場合、 > どのような形式のデータがドラッグされているのでしょうか? > (画像データ?画像ファイルのパス?)
クリップボードと同様、ドラッグデータには複数形式のデータが含まれます。 https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb776902%28vs.85%29.aspx
試しに、当方の環境で WebBrowser1.Navigate("http://www.officedaytime.com/clipmm/") の画像をドロップしてみたところ、10 種類のデータが使われていました。
(1) CFSTR_UNTRUSTEDDRAGDROP ("UntrustedDragDrop") untrusted すなわち「信頼できないデータが含まれているかもしれない」ことを 示すデータです。今回は URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY を 意味する &H180Bui という 32bit 値が入っていました。
(2) "msSourceUrl" ドロップ元ページの URL を示すデータです。今回は、NUL終端の UTF-16 文字列で 「http://www.officedaytime.com/clipmm/」が返されました。
(3) CF_HDROP (&HF) 存在しているファイルグループの場所を示す DROPFILES 構造体です。 今回は "C:\Users\…\AppData\Local\Microsoft\Windows\INetCache\IE\V33UQQPV\step1[1].png" なパスが 1 つ含まれていました。
(4) CFSTR_INETURLW ("UniformResourceLocatorW") ドロップされたアイテムの URL を示す UTF-16 文字列です。今回は NUL 終端付きの 「http://www.officedaytime.com/clipmm/img/step1.png」が返されました。
(5) CF_DIB (&H8) デバイス非依存ビットマップを示すバイナリです。 今回は、542×430の24bit画像として取得されました。
(6) CF_HTML ("HTML Format") HTML の内容を表す、BOM 無し UTF-8 データです。先頭に Version:1.0 StartHTML:000000199 EndHTML:000001318 StartFragment:000001219 EndFragment:000001260 StartSelection:000001219 EndSelection:000001260 SourceURL:http://www.officedaytime.com/clipmm/ なヘッダーが付与され、その後に MSHTML でクリッピング加工された HTML テキストが付随します。
(7) CF_UNICODETEXT (&HD) ドロップされたアイテムの URL を示す UTF-16 文字列です。 今回は、(4) と同じ文字列が入っていました。
(8) CF_TEXT (&HD) ドロップされたアイテムの URL を示す 既定のコードページ文字列です。 文字コードが異なるだけで、中身は (7) と一緒です。
(9) "DragImageBits" 画像をドラッグしている最中に浮かび上がる半透明の画像です。 (5) と同様に DIB ですが、アルファ値が入るので色数は 32bit です。
(10) "DragContext" 内容の意味は分かりません。16 バイトのバイナリが入っていました。 00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00
|
|