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
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
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne en C++
Notez que le bouton "Enregistrer" est nommé "&Enregistrer "et non "Enregistrer"
}
OriginalL'auteur John TallSmith
bien, vous devez trouver la fenêtre avec le titre de téléchargement de dialogue. et que vous devez trouver la fenêtre avec le titre de bouton de téléchargement/et puis de l'envoyer à cette fenêtre, cliquez sur message
et vous pouvez utiliser winspector (analogique de spy++). il est très utile d'utilité. Vous pouvez la découverte de beaucoup de choses à propos de windows;)
donc, vous pouvez essayer d'envoyer des souris et des événements
OriginalL'auteur smash
Essayez les solutions suivantes qui semblait fonctionner pour moi:
Je vous suggère de vérifier les retours de chaque fonction.
OriginalL'auteur Jon Cage
J'ai trouvé un moyen de le faire avec Internet Explorer 6 sous Windows XP.
(Désolé, le code VBA)
S'il vous plaît, dire si cela fonctionne pour vous.
OriginalL'auteur ELF
J'ai trouvé la plupart de ce sur StackOverflow: Comment gérer les Boîtes de Message tout en utilisant le navigateur web en C#?
et je l'ai modifiée pour moi
OriginalL'auteur seamonkey
Qui était en réalité un faux positif, si je ne me trompe pas; le comportement par défaut apparemment comme un failsafe semble être pour fermer la boîte de dialogue. Plutôt, il est positif que le bouton annuler peut être cliqué, mais de tenter d'cliquez sur Ouvrir ou Enregistrer va générer le même encore, dans ce contexte, réponse indésirable...
Il semble que ce soit une boîte de dialogue nous allons avoir à traiter avec, à moins que quelqu'un d'autre pourrait en remercions de confirmer le contraire?
OriginalL'auteur Nev
Rien dans le code proposé travaillé, j'ai fini par utiliser AutoIt script pour fermer une boîte de Dialogue d'Impression, le code suivant:
OriginalL'auteur Miro Krsjak