Sto lavorando sull'automazione di internet explorer e parte di esso comporta il download di file da un sito che è ospitato su asp 2.0 e utilizza l'autenticazione basata su moduli, in modo da creare fine per finire l'automazione ho usato l'automazione del browser.Premere il pulsante Salva di "Finestra di download del file" di internet explorer via C#
Sono stato in grado di raggiungere il punto in cui posso arrivare a fare clic su un URL che porta la finestra di dialogo "Download del file" del browser, quindi stavo cercando di utilizzare SendKeys per fare clic sul pulsante Salva ma per inutilmente non funzionava.
Ecco il codice in cui utilizzo il metodo FindWindow per ottenere il puntatore hWnd della finestra di dialogo Download del file, quindi utilizzando setActiveWindow, lo rendono la finestra attiva in modo che i comandi SendKeys funzionino su di esso e quindi utilizzando SendKeys che ho provato inviare Alt + S ma non ha funzionato. Ho osservato che, Tab, Escape e Invio funzionano, ma il pulsante Invio su Salva non funziona.
[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");
}
}
Utilizzando lo stesso codice sono stato in grado di accedere notepad modificando il valore in FindWindow a "Senza titolo - Blocco note".
Devo fare qualcosa di diverso in quanto è una finestra di dialogo e ora una finestra? Sto usando IE8.
Questo è il codice alternativo che ho provato dopo la risposta.
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");
Per chiarezza, aggiungo lo schermo della finestra di dialogo.
alt text http://www.freeimagehosting.net/uploads/4f23586401.png
Hai scritto la tua applicazione di automazione o stai usando qualcosa come il selenio? –
ho scritto la mia automazione, che è piuttosto banale. Prende essenzialmente l'oggetto IE Application, naviga in un URL. Accede tramite DOM e quindi fa clic su un URL che porta la finestra di download. –