none
Désactivation boite de dialogue ouvrir/enregistrer un téléchargement IE11 RRS feed

  • Discussion générale

  • Bonjour,

    Utilisant un Web Browser, je n'arrive pas à traiter la boite de dialogue ouvrir/enregistrer un fichier.
    Et donc impossible de valider l'enregistrement avec VB.NET.

    Peut-on désactiver cette boite de dialogue afin d'enregistrer sans confirmation ?
    Il existe de nombreux forum où des solutions sont proposées, mais toutes inefficaces.

    Ou peut-on gérer la boite de dialogue dans VB.NET avec le handle ?

    Pour ma part, j'ai réussi à détecter la boite de dialogue, mais impossible de gérer le bouton.
    J'ai un conflit sur la détection du handle, lié je pense au web browser.

    Merci pour votre aide. 


    François HEBERT

    jeudi 25 août 2016 10:38

Toutes les réponses

  • Vous avez probablement besoin de récupérer l'url et utiliser un webbrowser pour faire la sauvegarde.

    Regardez ce lien et les exemples: http://vbcity.com/forums/t/4359.aspx

    jeudi 25 août 2016 11:14
  • Merci pour ce lien.

    Malheureusement il est ancien et la plupart des liens sont fermé.

    Par contre, je reviens sur la fonction FindWindow et le handle.
    J'ai bien avancé et je suis en mesure d'identifier le handle du bouton "enregistrer".
    Cependant la fonction sendMessage n'agit pas.
    Avez-vous une idée ?

    Merci

     Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function

     Dim tWnd As IntPtr = Nothing
            Dim tWnd1 As Long = Nothing

            Do
                Application.DoEvents()
                tWnd = FindWindow(vbNullString, "Téléchargement de fichiers")
            Loop Until tWnd <> 0

            Dim BM_CLICK As Int32 = &HF5&


            tWnd1 = FindWindowEx(tWnd, IntPtr.Zero, "Button", "En&registrer")

            tWnd1 = SendMessage(tWnd1, BM_CLICK, 0, IntPtr.Zero)


    François HEBERT

    jeudi 25 août 2016 14:40
  • Pas sur pourquoi vous voulez utiliser SaveAs.

    Avez-vous essayer de faire un Save du fichier HTML?

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            WebBrowser1.Width = 1440
            WebBrowser1.Height = 4000
                   WebBrowser1.Navigate("https://social.msdn.microsoft.com/Forums/en-US/dae100c6-e0ac-4250-bc36-67b9bf876fc6/vbnet-how-to-take-automatic-screenshot-of-a-list-of-webpages-and-save-it-in-folder?forum=vbgeneral")
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object,
                            ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Try
                While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
                    Application.DoEvents()
                End While
    
                Dim LoadedPage As String
                LoadedPage = WebBrowser1.DocumentText
                ' Save the page to html
                My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\LoadedPageToSaveHTML.html", LoadedPage, True)
         End Sub


    vendredi 26 août 2016 08:10
  • Je dois récupérer des fichiers provenant d'une application (intranet).
    Il n'y a pas d'URL derrière ces fichiers, mais une applet java qui interroge la base de données et renvoie un fichier csv.

    Je suis donc obligé de passer par un handle pour valider le formulaire "enregistrer sous", puisque IE11 ne permet pas d'enregistrer sans confirmation.

    Depuis j'ai trouvé mon erreur. J'avais une erreur dans ma fonction :

    Voici le code permettant d'identifier la fenêtre et le bouton, puis de réaliser un appui sur la touche

    Déclaration:

    Imports System.Runtime.InteropServices

    Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
        Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As UInt32, ByVal lpString As String, ByVal cch As UInt32) As UInt32
        Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As UInt32, ByVal hWnd2 As UInt32, ByVal lpsz1 As String, ByVal lpsz2 As String) As UInt32

     

    Fonction : 

    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
        Private Shared Function SendMessage( _
          ByVal hwnd As IntPtr, _
          ByVal wMsg As Integer, _
          ByVal wParam As Integer, _
          <MarshalAs(UnmanagedType.LPTStr)> ByVal lParam As String) As Integer
        End Function

    Code :

     Dim tWnd As IntPtr = Nothing
            Dim tWnd1 As Long = Nothing
            Dim tWnd2 As Long = Nothing

            Do
                Application.DoEvents()
                tWnd = FindWindow(vbNullString, "Téléchargement de fichiers")
            Loop Until tWnd <> 0

            Dim BM_CLICK As Int32 = &HF5&

            Do
                Application.DoEvents()
                tWnd1 = FindWindowEx(tWnd, IntPtr.Zero, "Button", "En&registrer")
            Loop Until tWnd1 <> 0

            tWnd2 = SendMessage(tWnd1, BM_CLICK, 0, IntPtr.Zero)


    François HEBERT

    vendredi 26 août 2016 08:31