问题:我正在寻找绕过FileDownload弹出窗口并自动下载文件的方法。
实施细则
在我的Windows应用程序中,我使用Webbrowser组件来创建屏幕抓取应用程序。
我的webBrowser1呈现的视图包含一个表(实际页面中使用的Gridview),其中包含一个包含锚元素的td列(以及其他td列)。单击锚点将从SharePoint下载相关文件
一个样本:
<td><a href="javascript:__doPostBack('ctl00$PlaceHolderMain$TOC$ctl00','DownloadFile$0')">File 1</a></td>
要自动下载,我的Windows窗体中有一个&#34;下载&#34;按钮,其中试图下载表中的第一个文件(最终将下载所有文件)。
我的挑战是下载文件,因为它随FileDowload弹出窗口一起显示。
有没有办法禁用此弹出窗口并自动将文件下载到某个文件夹中。我知道它试图模仿IE功能。
我的下载代码如下:
private void btnDownload_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("__doPostBack", new string[] { "ctl00$PlaceHolderMain$TOC$ctl00", "DownloadFile$0"});
}
我尝试了各种方法。一种这样的方法是使用&#34; urlmon.dll&#34;并使用其URLDownloadToFile方法。但看起来因为URL不是普通的URL,它仍然保持提供FileDownload弹出窗口。
我尝试的另一种方法是使用&#34; user32.dll&#34;自动化点击。并使用SendKeys发送{TAB}和{Enter}键,但我无法获得此弹出窗口的句柄。
IntPtr hwnd = FindWindow("#32770", "File Download");
IntPtr a5 = FindWindow("#32770 (Dialog)", "File Download");
IntPtr nullptr = (IntPtr)0;
if (hwnd != nullptr)
{
SetActiveWindow(hwnd);
SendKeys.SendWait("{TAB}");
//SendKeys.SendWait("%S");
}
答案 0 :(得分:0)
//在下载事件开始或下载按钮之后,单击文件下载弹出窗口 //将显示在webbrowser控件中。输入以下代码
Thread now = new Thread(() =>
{
Thread.Sleep(2000);
// string nu = GetActiveWindowTitle();
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Enter}");
Thread.Sleep(4000);
// now create filename path
string filepath=@"c:\download\thisdownloadfilehere.pdf"
SendKeys.SendWait(filepath);
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Enter}");
});
now.Start();