Domanda Disabilitare SaveFileDialog dal controllo webbrowser

Matty80

Utente Bronze
18 Settembre 2020
45
11
0
25
Ciao, sto usando il controllo Webbrowser ( che non posso in nessun modo sostituire con WebView2) per un'app che scarica mp3 da un sito. Inserisco il link della canzone da youtube, e ne estraggo il link del download. Sfortunatamente il sito fa il download automatico e apre il SaveFileDialog di cui ne vorrei proprio fare a meno. L'unica cosa che ho trovato nel web e che ha un riscontro positivo è questo topic su SO , ma il codice è in c#. Riporto il codice:

Codice:
GetClassName(hWnd, ClassName, ClassName.Capacity);
 GetWindowText(hWnd, DialogTitle, DialogTitle.Capacity);
 DialogHandle = FindWindow(DIALOG_CLASS, DialogTitle.ToString());
    
 if (ClassName.ToString() == DIALOG_CLASS && DialogTitle.ToString().Contains(TempFilename))
 {
      ReturnValue = SendMessage(DialogHandle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
 }

Come potrei convertirlo in vb.net usando PInvoke to call setwineventhook in user32.dll ?
Vi ringrazio
 
Devo premettere che WebBrowser con IE non è solo una fogna, è proprio il male. Detto questo se proprio devi usarlo, sopprimere il dialog con hook e messaggi è un azzardo instabile e fonte inesauribile di bug, faresti prima a fare:

Codice:
    Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
        If e.Url.ToString().EndsWith(".mp3") Then
            e.Cancel = True
        End If
    End Sub
 
Devo premettere che WebBrowser con IE non è solo una fogna, è proprio il male. Detto questo se proprio devi usarlo, sopprimere il dialog con hook e messaggi è un azzardo instabile e fonte inesauribile di bug, faresti prima a fare:

Codice:
    Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
        If e.Url.ToString().EndsWith(".mp3") Then
            e.Cancel = True
        End If
    End Sub
Purtroppo il savefiledialog appare lo stesso.
Guarda
 
Non sapendo che convertitore usassi non potevo sapere il formato dell'url. Già è una soluzione sporca, tanto vale fare un'altra schifezza, cambia la condizione con:
Codice:
If e.Url.ToString().Contains(".shikisha.shiksha/") Then
 
  • Mi piace
Reazioni: DanyDollaro
Il dominio non è così probabile che lo cambino a breve. Faresti meglio a fare tutto senza webbrowser, questo snippet usa i loro servizi:



Vedi: https://pastebin.com/z3s98agW


Ogni tanto dà problemi nell'ultimo step di download del file causa CloudFlare e hosting con scarso uptime. Se ti interessa solo il link invece lo ottiene sempre.
 
Il dominio non è così probabile che lo cambino a breve. Faresti meglio a fare tutto senza webbrowser, questo snippet usa i loro servizi:



Vedi: https://pastebin.com/z3s98agW


Ogni tanto dà problemi nell'ultimo step di download del file causa CloudFlare e hosting con scarso uptime. Se ti interessa solo il link invece lo ottiene sempre.

Oltre al fatto che sei un genio e adoro questa tua soluzione con Webclient, mi da l'errore
System.Net.WebException: 'Errore del server remoto: (404) Non trovato.'
sulla linea Return wc.DownloadData(audioLink) . Comunque a me non interessa scaricarlo, ma solo ottenere il link del download, lo otterrei estraendo audioLink e mettendolo su una label?
Grazie