«Исправить», которое я использую, чтобы браузер сообщал вам, что его перетаскивают, отображает снимок экрана и обрабатывает обычные события c #.
[ComVisible(true)]
public class Communicator
{
private static frmMain m_mainWindow = null;
public Communicator(frmMain mainWindow)
{
m_mainWindow = mainWindow;
}
public void exit()
{
m_mainWindow.Close();
}
public void DragStarted(object e)
{
m_mainWindow.DoDragEnterFromScript();
}
}
private void frmMain_Load(object sender, EventArgs e)
{
webBrowser1.ObjectForScripting = new Communicator(this);;
webBrowser1.Navigate(@"about:blank");
}
public void DoDragEnterFromScript()
{
// Is this an executable, shortcut or batch?
Rectangle rect = new Rectangle(0, 0, webBrowser1.Size.Width, webBrowser1.Size.Height);
Bitmap bmp = new Bitmap(rect.Width, rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
Point ptCon;
ptCon = webBrowser1.PointToScreen(new Point(0, 0));
g.CopyFromScreen(ptCon, new Point(0, 0), webBrowser1.Size, CopyPixelOperation.SourceCopy);
pictureBox2.BackgroundImage = bmp;
//pictureBox2.BackColor = Color.Red;
webBrowser1.Visible = false;
pictureBox2.Visible = true;
pictureBox2.Location = new Point(0, 0);
pictureBox2.Size = webBrowser1.Size;
}
public void frmMain_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent(DataFormats.FileDrop))
return;
string[] arrfiles = (string[])e.Data.GetData(DataFormats.FileDrop);
// SUCCESS
}
А в html файле
var holder = document.getElementsByTagName('body')[0];
holder.ondragover = function () {
window.external.DragStarted(event);
return true;
};
Не забудьте спрятать поле для картинок после DragLeave / DragDrop