Para cancelar la descarga de archivos puedes utilizar la interfaz '
ShellBrowserWindow' de la librería COM '
shdocvw.dll', ubicada en el directorio 'C:\Windows\System32'.
Para obtener la url de descarga, puedes leer el atributo 'href' del elemento HTML activo. Supongo que esto funcionará siempre así... aunque no me atrevo a asegurarlo al 100% ya que no domino de forma avanzada la programación HTML.
En fin. Para usar el siguiente código de ejemplo, primero añade una referencia a la librería que he mencionado... no te pase como la última vez
xD. Aquí tienes:
Public NotInheritable Class Form1 : Inherits Form
Private WithEvents ShellWebBrowser1 As SHDocVw.ShellBrowserWindow
Public Sub New()
MyClass.InitializeComponent()
Me.WebBrowser1.ScriptErrorsSuppressed = True
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Shown
' Sitio web con varias descargas de archivos zip...
Me.WebBrowser1.Navigate("https://www.thinkbroadband.com/download")
End Sub
Private Sub WebBrowser1_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) Handles WebBrowser1.VisibleChanged
' Importante: no trasladar este código al método "Form1_Load"...
Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
If (wb.Visible) AndAlso (Me.ShellWebBrowser1 Is Nothing) Then
Me.ShellWebBrowser1 = DirectCast(wb.ActiveXInstance, SHDocVw.ShellBrowserWindow)
End If
End Sub
Private Sub ShellWebBrowser1_FileDownload(ByVal activeDocument As Boolean, ByRef cancel As Boolean) Handles ShellWebBrowser1.FileDownload
' Cancelar descarga de archivo...
cancel = True
' Obtener la url de descarga...
Dim href As String = Me.WebBrowser1.Document.ActiveElement.GetAttribute("href")
Console.WriteLine(href)
End Sub
End Class
Nótese que esto no impedirá poder seguir usando el menú contextual para descargar un archivo mediante la opción "Guardar destino como..."
Si quieres impedir la descarga mediante el menú contextual, puedes crear tu propio menú y asignarlo a la propiedad
WebBrowser1.ContextMenuStrip, o bien puedes suscribirte al evento
HtmlDocument.ContextMenuShowing para cancelar la aparición del menú. Un ejemplo minificado:
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
AddHandler wb.Document.ContextMenuShowing,
Sub(ByVal browser As Object, ByVal args As HtmlElementEventArgs)
args.ReturnValue = False
End Sub
End Sub
Saludos.