Estoy trabajando en la automatización del explorador de Internet y parte de ello consiste en descargar archivos de un sitio alojado en asp 2.0 y usa autenticación basada en formularios, para crear fin Para finalizar la automatización utilicé la automatización del navegador.Presione el botón Guardar del "diálogo de descarga de archivos" de Internet Explorer mediante C#
Pude llegar al paso donde puedo hacer clic en una URL que trae el cuadro de diálogo "Descargar archivo" del navegador, luego estaba tratando de hacer uso de SendKeys para hacer clic en el botón Guardar, pero en vano no estaba funcionando.
Aquí está el código donde utilizo el método FindWindow para obtener el puntero hWnd del cuadro de diálogo Descarga de archivos, y luego usando setActiveWindow lo hago la ventana activa para que los comandos SendKeys funcionen en él y luego use SendKeys Probé para enviar Alt + S, pero no funcionó. Observé que, Tab, Escape and Enter funciona, pero luego el botón Enter on Save no funciona.
[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");
}
}
Usando el mismo código pude acceder al bloc de notas cambiando el valor en FindWindow a "Untitled - Notepad".
¿Tengo que hacer algo diferente, ya que es un diálogo y ahora una ventana? Estoy usando IE8.
Este es el código alternativo que probé después de la respuesta.
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");
Para mayor claridad agrego la pantalla del diálogo.
alt text http://www.freeimagehosting.net/uploads/4f23586401.png
¿Ha escrito su propia aplicación de automatización o está usando algo como el selenio? –
escribí mi propia automatización, que es bastante trivial. Básicamente toma el objeto de la aplicación IE, navega a una url. Ingresa usando DOM y luego hace clic en una URL que trae el diálogo de descarga. –