Appuyez sur le bouton enregistrer de “téléchargement de Fichier boîte de dialogue” d'internet explorer via c#

Je suis en train de travailler sur internet explorer automatisation et une partie de elle implique le téléchargement de fichiers à partir d'un site qui est hébergé sur l'asp 2.0 et utilise l'authentification basée sur les formulaires, afin de créer à la fin de l'automatisation j'ai utilisé le navigateur de l'automatisation.

J'ai été en mesure de parvenir jusqu'à l'étape où je peux obtenir à cliquer sur une URL qui apporte le "dialogue" Téléchargement de Fichier de l'explorateur, puis j'essayais de faire usage de SendKeys, cliquez sur le bouton enregistrer, mais en vain, il n'a pas de travail.

Voici le code où j'ai utiliser la fonction FindWindow méthode pour obtenir le hWnd pointeur de Dialogue Téléchargement de Fichier, puis à l'aide de setActiveWindow j'ai fait la fenêtre active, de sorte que le SendKeys commandes d'œuvres sur elle, puis utiliser SendKeys j'ai essayé d'envoyer Alt + S, mais il ne fonctionne pas. J'ai observé que, Onglet, d'évacuation et d'Entrée des œuvres, mais Entrez ensuite sur le bouton Enregistrer ne fonctionne pas.

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetActiveWindow(IntPtr hWnd);

private void Form1_Load(object sender, EventArgs e)
{
    IntPtr hwnd = FindWindow(null, "File Download");
    IntPtr nullptr = (IntPtr)0;
    if (hwnd != nullptr)
    {
        SetActiveWindow(hwnd);
        SendKeys.SendWait("%S");
    }
}

En utilisant le même code que j'ai été en mesure d'accéder le bloc-notes en modifiant la valeur dans la fonction FindWindow pour "sans titre - bloc-notes".

Dois-je faire quelque chose de différent, comme c'est un dialogue et maintenant, une fenêtre? Je suis avec IE8.

C'est l'autre code que j'ai essayé suite à la réponse.

IntPtr hwnd = FindWindow(null, "File Download");
            IntPtr hokBtn = IntPtr.Zero;
            hokBtn = FindWindowEx(hwnd, hokBtn, "Button", IntPtr.Zero);
            hokBtn = FindWindowEx(hwnd, hokBtn, "Button", IntPtr.Zero);
            uint id = GetDlgCtrlID(hokBtn);
            SetActiveWindow(hwnd);
            IntPtr res = SendMessage(hokBtn, (int)0x00F5, 0, IntPtr.Zero);
            if (res.ToInt32() == 1)
                MessageBox.Show("success");

Pour plus de clarté je suis l'ajout de l'écran de la boîte de dialogue.

le texte d'alt http://www.freeimagehosting.net/uploads/4f23586401.png

Avez-vous écrit votre propre application d'automatisation ou êtes-vous à l'aide de quelque chose comme le Sélénium?
j'ai écrit mon propre automatisation, ce qui est assez trivial. C'est essentiellement la Demande de subvention de l'objet, permet d'accéder à une url. Les connexions à l'aide de DOM et ensuite clique sur un lien qui apporte la boîte de dialogue de téléchargement.

OriginalL'auteur Anirudh Goel | 2010-06-08