最近在做一个网页上调用迅雷下载的页面。我向迅雷提交下载地址时,迅雷会弹出 “建立新的下载任务”,然后我通过查找句柄的方式,让程序自动点击“立即下载”按钮,这一切在本地都是好好的,可以正常下载。可是上传到服务器上就不行了,运行这个页面时,桌面是不会弹出迅雷窗口的,但是在任务管理器里面有thunder.exe的进程。我个人的估计是因为服务器上的IIS是以服务的形式后台运行,所以没有桌面,也就调不到句柄。 像这样的情况应该如果解决啊
这是我的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Net;
using System.Diagnostics;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Threading;
using THUNDERAGENTLib;namespace down
{
public partial class test : System.Web.UI.Page
{
#region Dll Import
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;
#endregion
private void ClosePopWindow(object obj)
{
//这些用spy++可以看到
string lpszParentClass = "#32770"; //整个窗口的类名
string lpszParentWindow = "建立新的下载任务"; //窗口标题
string lpszClass_Submit = "Button"; //需要查找的Button的类名
string lpszName_Submit = "立即下载"; //需要查找的Button的标题 IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
IntPtr EdithWnd1 = new IntPtr(0);
int i = 0;
while (true)
{
//查到窗体,得到整个窗体
ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
Response.Write(ParenthWnd.ToString()+"<br>");
//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{
EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, "#32770", null);
EdithWnd1 = FindWindowEx(EdithWnd, EdithWnd1, lpszClass_Submit, lpszName_Submit);
Response.Write(EdithWnd.ToInt32());
if (!EdithWnd1.Equals(IntPtr.Zero))
{
SendMessage(EdithWnd1, WM_CLICK, (IntPtr)0, "0");
}
return;
}
Thread.Sleep(1000);
i++;
// Console.WriteLine("第"+i.ToString()+"次检查"); 5秒都没显示出来就推出循环
if (i > 5)
{
break;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
//test2
THUNDERAGENTLib.AgentClass agent = new THUNDERAGENTLib.AgentClass();//创建对象
agent.AddTask("http://xxx.com/ww.rar", "ww.rar", "D:\\", "", "", 1, 0, 5);
ThreadPool.QueueUserWorkItem(new WaitCallback(ClosePopWindow));
agent.CommitTasks();//提交
}
}
}
这是我的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Net;
using System.Diagnostics;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Threading;
using THUNDERAGENTLib;namespace down
{
public partial class test : System.Web.UI.Page
{
#region Dll Import
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;
#endregion
private void ClosePopWindow(object obj)
{
//这些用spy++可以看到
string lpszParentClass = "#32770"; //整个窗口的类名
string lpszParentWindow = "建立新的下载任务"; //窗口标题
string lpszClass_Submit = "Button"; //需要查找的Button的类名
string lpszName_Submit = "立即下载"; //需要查找的Button的标题 IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
IntPtr EdithWnd1 = new IntPtr(0);
int i = 0;
while (true)
{
//查到窗体,得到整个窗体
ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
Response.Write(ParenthWnd.ToString()+"<br>");
//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{
EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, "#32770", null);
EdithWnd1 = FindWindowEx(EdithWnd, EdithWnd1, lpszClass_Submit, lpszName_Submit);
Response.Write(EdithWnd.ToInt32());
if (!EdithWnd1.Equals(IntPtr.Zero))
{
SendMessage(EdithWnd1, WM_CLICK, (IntPtr)0, "0");
}
return;
}
Thread.Sleep(1000);
i++;
// Console.WriteLine("第"+i.ToString()+"次检查"); 5秒都没显示出来就推出循环
if (i > 5)
{
break;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
//test2
THUNDERAGENTLib.AgentClass agent = new THUNDERAGENTLib.AgentClass();//创建对象
agent.AddTask("http://xxx.com/ww.rar", "ww.rar", "D:\\", "", "", 1, 0, 5);
ThreadPool.QueueUserWorkItem(new WaitCallback(ClosePopWindow));
agent.CommitTasks();//提交
}
}
}
换个版本的迅雷