来,新手们,Internet Download Manager,艺术升华

这篇文章更新过后,我就准备回家过年了,你们好好的在整个春节慢慢研究。

我说过,技术的人总要有一些特例独行的思维产生,比如脑袋开始想起了一个技巧,爬虫。

爬啊爬啊,东西很多,有些地址我不好意思放出来,这个心里想想就好,但有人就是手痒,想把它Down下来当成犯罪证据。

下载工具Internet Download Manager(简称IDM)可以说是强大无比,当然你要拿BT种子,它是没辙就是了。

我们得做好公民应尽的职责,不要用BT去乱搞,人人影视网都被抓了,你还不老实,就因为BT太好用。

所以爬虫与IDM与春节的绵绵细雨更配哦。

爬虫我就不讲了高深的东西,去了解下,我们今天就来Down东西就行了。

下载很简单,迅雷,IDM算是比较主流能够开发对应接口调用的两个工具,但迅雷自从我会员过期后就没在考虑充值了。所以我理所当然的选择IDM作为我喜欢的下载工具。

添加批量任务了解下,虽然我们的实际跟它半毛关系都没有。

作为一名NET程序猿你这么Low,批量还得打开IDM来操作,我不想,你就在后台跑就行了,我告诉你要下载什么,你自己运行,自己下载,下载不了我就把你给卸载了。

想要作为资深影视专家或者艺术照专家你得先准备一些工具。

NET IDE VS03~VS2019随便选,反正我是用VS2017

艹还没开始就一堆七七八八,这么多就为了能让你向艺术之巅再出发,所以忍一下,忍一下就过去了。

首先你会遇到第一个难点,一串神秘代码,VB啊,天,怎么搞,我都快10年没碰了,但为了艺术,盘它。

Private Sub Command1_Click()
    Dim idm1 As CIDMLinkTransmitter
    Dim referer As String
    Dim cookie As String
    Dim postData As String
    Dim user As String
    Dim password As String
    Set idm1 = CreateObject("IDMan.CIDMLinkTransmitter")
    idm1.SendLinkToIDM "http://www.internetdownloadmanager.com/idman401.exe",
    referrer, cookie, postData, user, password, "C:\", "idman401.exe", 0
End Sub

虽然我把VB语法都忘光了也难不倒我看懂它:CIDMLinkTransmitter 这个是定义的东西哪里来? Set 语法哪里来?CreateObject 又是哪里来?我再次从新问了三次这些东西哪里来的啊。

其实很简单,你谷歌翻墙就知道了。

CIDMLinkTransmitter 是一个接口,也就说你需要它,但它哪里来呢。

作为一名不合格的程序猿你一定要刨根问底找到原有,有个奇怪的字眼混在里面,IDManLib说的是个Lib文件,进去之后发现根本没有用,我们换个方式,不同的眼光能够了解不同的艺术的角度。

然后我就用 IDM结果还真有那么多东西出来

告诉我们你必须得(You should)初中英语应该学过,可能现在小学课本就有了

而且还是你Run 那个什么Type Library Importer 呱噪~

好吧跟着走就是了。三个文件

但语句中混入了奇怪的软件(TlbImp.exe),我得想办法,Everything 它总是来得这么及时,如果你搜索不到,那恭喜你,你不是一个合格的开发员,赶紧回家过年

跟谷歌那个写出来的步骤结果一模一样就像孪生兄弟,一点都不含糊。但问题是生成的文件哪去了,不知道啊

还是找到了,我真是天才

唐僧取经已经走到了低九九八十难了,引用,你肯定会把,引用它,它等下会给你找事情做的。

如此简单就完成了,剩下的就爬虫就好了,哈哈哈哈哈哈哈哈哈,大笑三声后就可以成为艺术家了。

//VB源码
            //http://www.internetdownloadmanager.com/support/idm_api.html
            //Dim idm1 As CIDMLinkTransmitter
            //Dim referer As String
            //Dim cookie As String
            //Dim postData As String
            //Dim user As String
            //Dim password As String
            //Set idm1 = CreateObject("IDMan.CIDMLinkTransmitter")
            //idm1.SendLinkToIDM "http://www.internetdownloadmanager.com/idman401.exe",
            //referrer, cookie, postData, user, password, "C:\", "idman401.exe", 0

//C#源码

        public Type GetObject(string type,string libName)
        {
            if (type == "1")
            {
                System.Type oType = System.Type.GetTypeFromCLSID(new Guid(libName));
                return oType;
            }
            else
            {
                System.Type oType = System.Type.GetTypeFromProgID(libName);
                return oType;
            }

        }



public void Click(){

            string referrer = "";
            string cookie="";
            string postData="";
            string user="";
            string password="";
            Type getObj = GetObject("2", "IDMan.CIDMLinkTransmitter");
            var o = Activator.CreateInstance(getObj);

            object[] param = new object[9];
            param[0] = txtDownLink.Text;
            param[1] = referrer;
            param[2] = cookie;
            param[3] = postData;
            param[4] = user;
            param[5] = password;
            param[6] = @"C:\";
            param[7] = "另存名字.exe";
            param[8] = 0;
            getObj.InvokeMember("SendLinkToIDM", 
            System.Reflection.BindingFlags.InvokeMethod, null, o, param);
}

当然翻到这里你会发现篇幅似乎还没完啊。

1)Type getObj = GetObject("2", "IDMan.CIDMLinkTransmitter") 获取的 getObj 值为null?

2)var o = Activator.CreateInstance(getObj); 报错?

说好的别人代码都是这样转啊,为什么返回null。

原因可能如下,我呢是用的破解版的,注册表中根本没有 IDMan.CIDMLinkTransmitter 这玩意儿。你可以尝试重启电脑试试。

总之,我们通过COM进行调用,你得保证它是存在得,谁说都不算,只有它再注册表才算。如果没有,那么你就重启重新安装注册,重启电脑,就这么一直重复操作,五年后应该就会有了。

没错就这么简单即使我不说你也能花三天找到答案。

然后运行代码……

百分之五十的概率,这个东西你运行不起来。

我花了两个小时也没解决的问题。

提示:错误异常 COM 目标不会实现 IDispatch。

我也不知道为什么,总之两个小时候我就不再纠结这是问题了。

 

然后开始翻谷歌,这语句写的也没错啊。

错误提示:

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	CS1752	无法嵌入互操作类型“CIDMLinkTransmitterClass”。请改用适用的接口。	IDMDownLoading	C:\Users\temshow\source\repos\IDMDownLoading\IDMDownLoading\Form1.cs	73	活动的

 

然后各种巴赫猜想,最终定位再一句,互操作类型,然后试着改下,欸,还真可以了。

再次调用真的,真的就成功了。

 

但我就是纠结

 getObj.InvokeMember("SendLinkToIDM", System.Reflection.BindingFlags.InvokeMethod, null, o, param);

为什么要给我报错,我做错了什么。

然后神奇的事情就来了

var o = Activator.CreateInstance(getObj);

=》

var o = (IDManLib.CIDMLinkTransmitter)Activator.CreateInstance(getObj);


o.SendLinkToIDM("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0);

成功了,竟然也成功了。

new IDManLib.CIDMLinkTransmitter().SendLinkToIDM("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0);

这个也成功了,也成功了!!你知道吗,它也成功了,我他妈的狗……拿耗子。

要知道怎么多调用方式我随便一个都行啊。

 

 

 

最终贴上完整代码,代码是编译不过去得,有问题,也说了解决的相关问题,你得自己看,否则怎么能见到真正得艺术呢。您说是吧!

using IDManLib;
using System;
using System.Windows.Forms;

namespace IDMDownLoading
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDown_Click(object sender, EventArgs e)
        {
            //VB源码
            //http://www.internetdownloadmanager.com/support/idm_api.html
            //Dim idm1 As CIDMLinkTransmitter
            //Dim referer As String
            //Dim cookie As String
            //Dim postData As String
            //Dim user As String
            //Dim password As String
            //Set idm1 = CreateObject("IDMan.CIDMLinkTransmitter")
            //idm1.SendLinkToIDM "http://www.internetdownloadmanager.com/idman401.exe",
            //referrer, cookie, postData, user, password, "C:\", "idman401.exe", 0

            string referrer = "";
            string cookie="";
            string postData="";
            string user="";
            string password="";
            //正常方法1
            Type getObj = GetObject("1", "AC746233-E9D3-49CD-862F-068F7B7CCCA4");
            //正常方法2
            //Type getObj = GetObject("2", "IDMan.CIDMLinkTransmitter");

            var o = (IDManLib.CIDMLinkTransmitter)Activator.CreateInstance(getObj);

            #region 报错代码 
            //错误异常 COM 目标不会实现 IDispatch。
            object[] param = new object[9];
            param[0] = txtDownLink.Text;
            param[1] = referrer;
            param[2] = cookie;
            param[3] = postData;
            param[4] = user;
            param[5] = password;
            param[6] = @"C:\";
            param[7] = "另存名字.exe";
            param[8] = 0;
            getObj.InvokeMember("SendLinkToIDM", System.Reflection.BindingFlags.InvokeMethod, null, o, param);
            #endregion

            #region 正常调用1
            o.SendLinkToIDM("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0);

            #endregion
            #region 正常调用2
            new IDManLib.CIDMLinkTransmitter().SendLinkToIDM("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0);
            #endregion
            #region 正常调用3
            new IDManLib.CIDMLinkTransmitterClass().SendLinkToIDM("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0);
            #endregion
            #region 正常调用4
            new IDManLib.CIDMLinkTransmitterClass().SendLinkToIDM2("http://www.internetdownloadmanager.com/idman401.exe", referrer, cookie, postData, user, password, @"C:\", "idman401.exe", 0, null, null);
            #endregion
        }

        public Type GetObject(string type,string libName)
        {
            if (type == "1")
            {
                System.Type oType = System.Type.GetTypeFromCLSID(new Guid(libName));
                return oType;
            }
            else
            {
                System.Type oType = System.Type.GetTypeFromProgID(libName);
                return oType;
            }

        }
    }
}

当然调用完你会发现它会弹出下载框,而你解决掉它,你可以用 去掉第三方弹框的方式处理,当你处理不了的时候,

你就这样,设置下就行了

 

全套内容 (EveryThing没打包,VS2017也没打包)

度盘/s/1QAFPTwwFbzDYIB972VIVjA  密码 JEE8 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值