C#中调用迅雷的下载组件实现下载时如何能不弹出添加任务窗口而直接就开始下载?

hjl425 2008-05-16 01:49:57
参照这篇文件的写法:http://dotnet.chinaitlab.com/VBNET/716228.html,可以实现程序里调用迅雷来进行BT下载

但是每次下载的时候都会弹出添加任何的对话框,总是需要再点击一次确定才可以,如何不弹出来呢,直接启动迅雷开始下载(或者能够不启动迅雷主界面更好)??

我的示例代码如下:

THUNDERAGENTLib.Agent ThunderEng = new THUNDERAGENTLib.Agent();//创建迅雷调用对象
ThunderEng.AddTask("E:\\test.torrent", "2.rar", "E:\\downtest", "", "", 1, 0, 10);//添加任务
ThunderEng.CommitTasks();//提交下载


上面三句代码即可将指定种子文件提交给迅雷下载到指定目录,但问题是每次都要弹出界面添加任务的界面,如何不弹出来就直接下载?
...全文
2779 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cololee 2012-06-05
  • 打赏
  • 举报
回复
如果贴主看见了请回复我 我找这个好久了 这都几年的帖子了你肯定已经解决问题了吧

首先奉上:谢谢!

我用了那段代码 但是经测试发现对迅雷新建窗口无效 但是对其他的一些窗体确可以 不知道这是为什么

或者LZ有什么更好的办法已经解决了的 请教点经验!

如果您老看见一定要回复我 谢谢!!!
bobo176142735 2009-09-22
  • 打赏
  • 举报
回复
搞那么麻烦,在迅雷5.8版本中,工具-配置-高级,通过IE右键打开任务,去掉不选,然后在调用迅雷的时候 设为自动或迅雷默认就OK了, 我前几天刚好做到,另外,任务只能一个一个加,批量加无效
高公子 2009-09-22
  • 打赏
  • 举报
回复
两种方法结合使用是最好的
[Quote=引用 10 楼 excursionboy 的回复:]
高手,从根本入手解决问题!佩服!

引用 3 楼 sycdirdircc 的回复:
在ThunderEng.CommitTasks();
这句前开个监视进程 用win32的api 监视窗口 发现打开了就发消息点确定,


THUNDERAGENTLib.Agent ThunderEng = new THUNDERAGENTLib.Agent();//创建迅雷调用对象
ThunderEng.AddTask("E:\\test.torrent", "2.rar", "E:\\downtest", "", "", 1, 0, 10);//添加任务
ThreadPool.QueueUserWorkItem(new WaitCallback(ClosePopWindow));
ThunderEng.CommitTasks();//提交下载


//关消息的方法
private  void ClosePopWindow(object obj)
        {
            //这些用spy++可以看到
            string lpszParentClass = "#32770"; //整个窗口的类名
            string lpszParentWindow = "建立新的下载任务"; //窗口标题
            string lpszClass_Submit = "Button"; //需要查找的Button的类名
            string lpszName_Submit = "确定(&O)"; //需要查找的Button的标题         

            IntPtr ParenthWnd = new IntPtr(0);
            IntPtr EdithWnd = new IntPtr(0);
            int i = 0;
            while (true)
            {       
                //查到窗体,得到整个窗体
                ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
                //判断这个窗体是否有效
                if (!ParenthWnd.Equals(IntPtr.Zero))
                {

                    //得到Button这个子窗体,并触发它的Click事件
                    EdithWnd = FindWindowEx(ParenthWnd,
                        EdithWnd, lpszClass_Submit, lpszName_Submit);
                    if (!EdithWnd.Equals(IntPtr.Zero))
                    {
                        SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");
                    }
                    return;
                }
                Thread.Sleep(1000);
                i++;
            //  Console.WriteLine("第"+i.ToString()+"次检查"); 5秒都没显示出来就推出循环
                if (i>5)
                {
                    break;
                }
            }
        }


    #region Dll Import 需要导入的api 声明。


    [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


     



[/Quote]
高公子 2009-09-22
  • 打赏
  • 举报
回复
高手,从根本入手解决问题!佩服!

[Quote=引用 3 楼 sycdirdircc 的回复:]
在ThunderEng.CommitTasks();
这句前开个监视进程 用win32的api 监视窗口 发现打开了就发消息点确定,


THUNDERAGENTLib.Agent ThunderEng = new THUNDERAGENTLib.Agent();//创建迅雷调用对象
ThunderEng.AddTask("E:\\test.torrent", "2.rar", "E:\\downtest", "", "", 1, 0, 10);//添加任务
ThreadPool.QueueUserWorkItem(new WaitCallback(ClosePopWindow));
ThunderEng.CommitTasks();//提交下载


//关消息的方法
private  void ClosePopWindow(object obj)
        {
            //这些用spy++可以看到
            string lpszParentClass = "#32770"; //整个窗口的类名
            string lpszParentWindow = "建立新的下载任务"; //窗口标题
            string lpszClass_Submit = "Button"; //需要查找的Button的类名
            string lpszName_Submit = "确定(&O)"; //需要查找的Button的标题         

            IntPtr ParenthWnd = new IntPtr(0);
            IntPtr EdithWnd = new IntPtr(0);
            int i = 0;
            while (true)
            {       
                //查到窗体,得到整个窗体
                ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
                //判断这个窗体是否有效
                if (!ParenthWnd.Equals(IntPtr.Zero))
                {

                    //得到Button这个子窗体,并触发它的Click事件
                    EdithWnd = FindWindowEx(ParenthWnd,
                        EdithWnd, lpszClass_Submit, lpszName_Submit);
                    if (!EdithWnd.Equals(IntPtr.Zero))
                    {
                        SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");
                    }
                    return;
                }
                Thread.Sleep(1000);
                i++;
            //  Console.WriteLine("第"+i.ToString()+"次检查"); 5秒都没显示出来就推出循环
                if (i>5)
                {
                    break;
                }
            }
        }


    #region Dll Import 需要导入的api 声明。


    [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


     



[/Quote]
tyeken8 2009-04-11
  • 打赏
  • 举报
回复
不用,完全不用那么麻烦,就是上面7楼说的方法
十八道胡同 2009-04-11
  • 打赏
  • 举报
回复
应该可以捕捉这个窗口 在点确定的啊。
tyeken8 2009-04-11
  • 打赏
  • 举报
回复
http://www.jb51.net/article/15121.htm
看看这个方法,成功
cja03 2009-04-11
  • 打赏
  • 举报
回复
迅雷有个“新建任务时打开窗口”,应该有相应的接口。
帮顶!
tyeken8 2009-04-11
  • 打赏
  • 举报
回复
换用BitSpirit好了,很方便的说

我也在研究迅雷的COM的问题,只不过我是下载HTTP

打算换用wget……
sycdirdircc 2008-10-09
  • 打赏
  • 举报
回复
开头不忘

using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.Win32;
sycdirdircc 2008-10-09
  • 打赏
  • 举报
回复
在ThunderEng.CommitTasks();
这句前开个监视进程 用win32的api 监视窗口 发现打开了就发消息点确定,


THUNDERAGENTLib.Agent ThunderEng = new THUNDERAGENTLib.Agent();//创建迅雷调用对象
ThunderEng.AddTask("E:\\test.torrent", "2.rar", "E:\\downtest", "", "", 1, 0, 10);//添加任务
ThreadPool.QueueUserWorkItem(new WaitCallback(ClosePopWindow));
ThunderEng.CommitTasks();//提交下载




//关消息的方法
private void ClosePopWindow(object obj)
{
//这些用spy++可以看到
string lpszParentClass = "#32770"; //整个窗口的类名
string lpszParentWindow = "建立新的下载任务"; //窗口标题
string lpszClass_Submit = "Button"; //需要查找的Button的类名
string lpszName_Submit = "确定(&O)"; //需要查找的Button的标题

IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
int i = 0;
while (true)
{
//查到窗体,得到整个窗体
ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
//判断这个窗体是否有效
if (!ParenthWnd.Equals(IntPtr.Zero))
{

//得到Button这个子窗体,并触发它的Click事件
EdithWnd = FindWindowEx(ParenthWnd,
EdithWnd, lpszClass_Submit, lpszName_Submit);
if (!EdithWnd.Equals(IntPtr.Zero))
{
SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");
}
return;
}
Thread.Sleep(1000);
i++;
// Console.WriteLine("第"+i.ToString()+"次检查"); 5秒都没显示出来就推出循环
if (i>5)
{
break;
}
}
}



#region Dll Import 需要导入的api 声明。


[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








hmilu00 2008-05-30
  • 打赏
  • 举报
回复
关注~!
你晓得怎么解决了吗?Q我啊~!51278262
hjl425 2008-05-29
  • 打赏
  • 举报
回复
怎么都没人知道啊

110,547

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧