首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 怎么获取迅雷弹出提示窗口的句柄,并触发“立即下载”按钮的Click事件

2013-04-02 
C# 如何获取迅雷弹出提示窗口的句柄,并触发“立即下载”按钮的Click事件我每天需要从远程服务器4次定时下载

C# 如何获取迅雷弹出提示窗口的句柄,并触发“立即下载”按钮的Click事件
我每天需要从远程服务器4次定时下载文件,每次近100个,约4G,调用FTP下载根本来不及,因此只能借助第三方高速下载的组件,目前最好用的是迅雷,但是每下载一个文件都有提示窗口弹出。尽管不触发提示窗口的“立即下载”的Click事件也能下载,但在下载时软件得不到下载信息,并且下载完以后该提示窗口不会关闭,一天下来有近400个窗口,这不是一个正常软件。请问各位高手,这么解决这个问题。(百度搜到的网络上的一些解决办法经过试验都是没有用的,希望高手提供的方案是经过测试后切实可用的) 高速下载 迅雷 弹出窗口 句柄
[解决办法]
转ps:进入工具--配置--高级,把 通过IE右键菜单 “使用迅雷下载”添加任务 这个选项前面的勾去掉。 
保持迅雷开启状态,就不会出现那个确认添加任务的对话框了。

下面是通过获取窗体句柄,发送SendMessage消息来关闭。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// FindWindow获取窗口标题的句柄
        /// </summary>
        /// <param name="lpClassName"></param>
        /// <param name="lpWindowName"></param>
        /// <returns></returns>
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);

        /// <summary>
        /// 获得客户区矩形
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="lpRect"></param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        public static extern int GetClientRect(IntPtr hWnd, out RECT lpRect);

        /// <summary>
        /// 设置为活动窗体
        /// </summary>
        /// <param name="hWnd"></param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        public const int WM_KEYDOWN = 0x0100;
        public const int VK_RETURN = 0x0D;


        public const int WM_KEYUP = 0x0101;
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="message"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        [DllImport("user32.dll ", CharSet = CharSet.Unicode, EntryPoint = "SendMessage")]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

        /// <summary>
        /// 矩形结构
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int hwnd = FindWindow(null, "新建任务");
            IntPtr p = new IntPtr(hwnd);
            if (p == IntPtr.Zero)
                return;
            //设置为活动窗体,防止被其他窗口挡住
            SetForegroundWindow(p);
            RECT rc;
            GetClientRect(p, out rc);
            //迅雷新建任务窗口大小 466 x 457
            if (rc.right == 466 && rc.bottom == 457)  
            {
                //获取不了立即下载按钮,就用回车键下载。
                SendMessage(p, WM_KEYDOWN, new IntPtr(VK_RETURN), new IntPtr(0));
                SendMessage(p, WM_KEYUP, new IntPtr(VK_RETURN), new IntPtr(0)); 


            }  
        }
    }
}

热点排行