最近在做一个网页上调用迅雷下载的页面。我向迅雷提交下载地址时,迅雷会弹出 “建立新的下载任务”,然后我通过查找句柄的方式,让程序自动点击“立即下载”按钮,这一切在本地都是好好的,可以正常下载。可是上传到服务器上就不行了,运行这个页面时,桌面是不会弹出迅雷窗口的,但是在任务管理器里面有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();//提交
            
            
        }
    }
}