TC官方合作论坛

标题: 大漠免注册的正确源码 [打印本页]

作者: itcfan    时间: 2014-3-27 23:30
标题: 大漠免注册的正确源码
本帖最后由 itcfan 于 2014-3-28 15:20 编辑

现在学习了解到两种大漠的注册方法:
第一种是:
    ws=com("Wscript.Shell")
    ws.run("regsvr32 atl.dll /s")
    辅助.注册插件("rc:\\dm.dll",真)
非常简单,但360会报警,这会让一些人以为有病毒。

第二种是:
    dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)  
    dm=com("dm.dmsoft")
    版本=3.1233
    如果(dm.Ver()!=版本)
        辅助.消息框("插件注册失败!","注意")
    否则
        辅助.消息框("插件注册成功!","恭喜")
        调试输出(dm.Ver())
    如果结束  
说是免注册,但测试发现,如果“接口查看器”没有注册COM,就不能正常使用?
那在别人的电脑里怎么可能会注册COM?这免注册意义何在?

================================解决方案==================================
  经过hualaosi 朋友的帮助,终于解决了问题所在:
一是免注册DLL的问题,附件上传来了。
二是代码问题,给某些免注册的教程视频误导了,下面给出一份最新正常运行的源码给大家。
  1. 空间 大漠插件注册

  2. 变量 dm

  3. 功能 开始_点击()
  4. 网络时间=dm.GetNetTime()
  5. 辅助.消息框(网络时间)
  6. 调试输出(网络时间)
  7. 功能结束

  8. 功能 初始化()
  9. ws=com("Wscript.Shell")
  10. ws.run("regsvr32 atl.dll /s")
  11. dllcallret=dllcall(辅助.获取资源路径("rc:dmreg.dll"),"int","SetDllPathA","char *",辅助.获取资源路径("rc:dm.dll"),"int",0)
  12. dm=com("dm.dmsoft")
  13. 功能结束

  14. 空间结束
复制代码

最后还是要非常感谢hualaosi 朋友,谢谢!

作者: 187144831    时间: 2014-3-28 07:22
是你没搞懂
作者: itcfan    时间: 2014-3-28 08:55
187144831 发表于 2014-3-28 07:22
是你没搞懂

所以我才问啊~~
作者: hualaosi    时间: 2014-3-28 11:48
本帖最后由 hualaosi 于 2014-3-28 12:18 编辑

不知道我说的对不对,我的理解是:以下的代码
dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
就是注册插件,不过,不是用脚本直接注册,而是叫windows系统去帮你注册。
脚本发出的系统命令,当然会让流氓杀毒软件360盯上,但是windows发出的系统命令,360再流氓也不敢说不呀。。

比如我说,失联马航被我找到了,大家一定不相信。但如果中国官方发布了新闻发布会说,失联马航已经被网友hualaosi,找到了,并公布了我照的相片,那样大家就相信了,都认识我是英雄了。哈哈。。

总归四个字:曲线救国。
不知道我说的比喻正不正确。


作者: itcfan    时间: 2014-3-28 12:41
hualaosi 发表于 2014-3-28 11:48
不知道我说的对不对,我的理解是:以下的代码
dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc: ...

你的意思我明白,我想问的是:
使用:dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
dm.dll为什么在“接口查看器”没有注册COM,就不能正常使用?
也就是换台电脑,对方没有注册COM,那程序不是运行不正常了?
是我代码不对还是RegDll.dll不支持3.1233版本?
作者: hualaosi    时间: 2014-3-28 12:43
itcfan 发表于 2014-3-28 12:41
你的意思我明白,我想问的是:
使用:dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll ...

这个问题不存在,我测试过,这种曲线注册方式,在完全没有运行过大漠插件的电脑中,包括win7系统中都能顺利运行。
作者: hualaosi    时间: 2014-3-28 12:53
为防止网上Ghost系统把系统部分功能精简了,你用以下方式注册大漠,一定不会出问题
  1.     ws=com("Wscript.Shell")
  2.     ws.run("regsvr32 atl.dll /s")
  3.     dllcallret=dllcall("rc:dmreg.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
复制代码


作者: itcfan    时间: 2014-3-28 12:59
[attach]15093[/attach]
不行啊,会出现这个错误。

注册COM后就一切正常了。
作者: itcfan    时间: 2014-3-28 13:07
能否给个完整的源码给我看一下,我自己分析一下那里出问题。


作者: itcfan    时间: 2014-3-28 13:12
本帖最后由 itcfan 于 2014-3-28 13:14 编辑
  1. 空间 大漠插件注册

  2. 变量 dm

  3. 功能 开始_点击()
  4.     ws=com("Wscript.Shell")
  5.     ws.run("regsvr32 atl.dll /s")
  6.     //dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  7.     dm=com("dm.dmsoft")  
  8.     线程.开启("大漠插件注册.自动注册大漠插件","")
  9.     网络时间=dm.GetNetTime()
  10.     调试输出(网络时间)   
  11. 功能结束

  12. 功能 自动注册大漠插件()
  13.     程序DM版本="3.1233"
  14.     是否成功=辅助.是否注册("dm.dmsoft")
  15.     如果(是否成功)
  16.         调试输出("插件已注册")
  17.         dm=com("dm.dmsoft")
  18.         调试输出("插件已注册,当前使用版本:"&dm.Ver())
  19.         如果(程序DM版本!=dm.Ver())
  20.             调试输出("插件已注册,插件版本错误重新注册")
  21.             dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  22.             //是否成功=辅助.注册插件("rc:\\dm.dll",真)
  23.             如果(是否成功)
  24.                 dm=null
  25.                 dmm=com("dm.dmsoft")
  26.                 调试输出("插件注册成功,注册版本")
  27.                 辅助.退出()
  28.             如果结束
  29.         如果结束
  30.     否则
  31.         调试输出("插件未注册,开始注册插件")
  32.         dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  33.         //是否成功=辅助.注册插件("rc:\\dm.dll",真)
  34.         如果(是否成功)
  35.             调试输出("插件注册成功")
  36.         如果结束
  37.     如果结束
  38. 功能结束

  39. 空间结束
复制代码



这是我的代码,帮我分析一下

作者: hualaosi    时间: 2014-3-28 13:31
  1. 空间 大漠插件注册

  2. 变量 dm

  3. 功能 开始_点击()
  4.     ws=com("Wscript.Shell")
  5.     ws.run("regsvr32 atl.dll /s")
  6.     dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  7.     dm=com("dm.dmsoft")  
  8.     //线程.开启("大漠插件注册.自动注册大漠插件","")  //注册插件不用线程,也就是不用多次注册.
  9.     网络时间=dm.GetNetTime()
  10.     调试输出(网络时间)   
  11. 功能结束

  12. //功能 自动注册大漠插件()
  13.     //程序DM版本="3.1233"
  14.     //是否成功=辅助.是否注册("dm.dmsoft")
  15.     //如果(是否成功)
  16.         //调试输出("插件已注册")
  17.         //dm=com("dm.dmsoft")
  18.         //调试输出("插件已注册,当前使用版本:"&dm.Ver())
  19.         //如果(程序DM版本!=dm.Ver())
  20.             //调试输出("插件已注册,插件版本错误重新注册")
  21.             //dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  22.             ////是否成功=辅助.注册插件("rc:\\dm.dll",真)
  23.             //如果(是否成功)
  24.                 //dm=null
  25.                 //dmm=com("dm.dmsoft")
  26.                 //调试输出("插件注册成功,注册版本")
  27.                 //辅助.退出()
  28.             //如果结束
  29.         //如果结束
  30.     //否则
  31.         //调试输出("插件未注册,开始注册插件")
  32.         //dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)
  33.         ////是否成功=辅助.注册插件("rc:\\dm.dll",真)
  34.         //如果(是否成功)
  35.             //调试输出("插件注册成功")
  36.         //如果结束
  37.     //如果结束
  38. //功能结束

  39. 空间结束
复制代码
兄弟,你想多了。
用以下的代码吧:
作者: hualaosi    时间: 2014-3-28 13:34
测试了,是你的regdll.dll版本问题。
作者: itcfan    时间: 2014-3-28 13:39
hualaosi 发表于 2014-3-28 13:31
兄弟,你想多了。
用以下的代码吧:

是不是不能放在功能 初始化()?
作者: itcfan    时间: 2014-3-28 13:47
本帖最后由 itcfan 于 2014-3-28 13:52 编辑

[attach]15096[/attach]
先卸载了掉DM.DLL
再运行代码,就出现这样。
如果注册成功,那就不会报错,能调试输出:时间。

我就是这个搞不懂,软件发给别人,总不能让人主动去注册COM吧?

作者: itcfan    时间: 2014-3-28 13:57
hualaosi 发表于 2014-3-28 13:34
测试了,是你的regdll.dll版本问题。


测试了一样会这样,你试试先卸载DM.DLL,再运行代码看看。
作者: hualaosi    时间: 2014-3-28 14:09
抱歉,我也是新手,没把我系统的的com卸载就测试,问题找到了,你的代码中和插件文件中二次问题

第一处:把资源中的regdll.dll换成我上面提供的dmreg.dll,你用错文件了。

第二处:修改代码
dllcallret=dllcall(辅助.获取资源路径("rc:dmreg.dll"),"int","SetDllPathA","char *",辅助.获取资源路径("rc:dm.dll"),"int",0)

你再试?
作者: itcfan    时间: 2014-3-28 14:23
hualaosi 发表于 2014-3-28 14:09
抱歉,我也是新手,没把我系统的的com卸载就测试,问题找到了,你的代码中和插件文件中二次问题

第一处: ...

我想说,某些免注册的教学视频是不是要更新了?
dllcallret=dllcall(辅助.获取资源路径("rc:dmreg.dll"),"int","SetDllPathA","char *",辅助.获取资源路径("rc:dm.dll"),"int",0)
使用后确实能可以了。非常感谢你!
作者: hualaosi    时间: 2014-3-28 14:26
不客气,共同进步。实际上,用这种方法使用大漠,系统没残留,关闭脚本后,插件所占资源自然就释放干净了。
作者: 超自然    时间: 2014-3-28 17:37
itcfan 发表于 2014-3-28 13:12
这是我的代码,帮我分析一下

1233有免注册方法??
只有1235之后的版本才有免注册的
作者: hualaosi    时间: 2014-3-28 19:04
超自然 发表于 2014-3-28 17:37
1233有免注册方法??
只有1235之后的版本才有免注册的

教程里是这样说的。我信了~~
作者: luoliang0    时间: 2014-5-19 01:40
天天看做这个论坛不听回帖
作者: haohuaiqi    时间: 2014-5-20 04:15
你的: dllcallret=dllcall("rc:RegDll.dll","int","SetDllPathA","char *","rc:dm.dll","int",0)

你这个是看别人的吧,我也无法使用和你一样,是这个RegDll.dll的问题
别人的:dllcallret=dllcall("c:\\DmReg.dll","int","SetDllPathA","char *",dmpath,"int",0)

别人的是DmReg.dll似乎这个和RegDll.dll不一样
我也没有DmReg.dll
作者: adamyun    时间: 2014-6-16 09:39
升级后怎么不行了
作者: 亚太丶    时间: 2014-7-27 19:56
谢谢分享,感谢
作者: wdq108    时间: 2014-8-26 16:37
大漠的免注册困扰我好几天了
作者: 982830315    时间: 2014-11-21 18:56

作者: maxsky    时间: 2015-1-23 23:30
不错测试过
作者: cxmin123456    时间: 2015-1-31 10:29
本帖最后由 cxmin123456 于 2015-1-31 10:35 编辑

讲了这么多,你们都没有提到,大漠插件是不是要手动复制到哪个目录,如果用户没有大漠插件,程序又怎样把大漠插件放到指定目录?注册大漠完全可以用cmd方法,然后直接dm=com("dm.dmsoft"),就可以使用大漠的函数(免费部分)。所以,在写代码之前,应该交代一下大漠插件放在电脑哪里,怎样处理。本人只想到手动把大漠插件放到指定目录,然后代码注册,没有想到像按键精灵那样可以释放附件到某个目录。所以这就引出一个问题,TC怎样把指定文件(用户电脑没有这个文件)放到指定目录下?这里求答案。
作者: 火浴凤凰    时间: 2015-3-24 20:59
谢谢,学到了
作者: 火浴凤凰    时间: 2015-3-24 21:03
好像只在初始化()里写注册大漠是不行的,我把那里面的代码放开始功能里就运行正常了。可看教程里和你这里的代码都只是在初始化里放着,搞不明白是怎么回事了

作者: jkasdjio005@163    时间: 2015-3-24 22:27
33333333333333333333333333333333333333333
作者: OOOO    时间: 2015-4-26 13:32
自然大神说1233版本不支持免注册,不知道楼主测试没,反正我测试了  是可以免注册的 楼主有什么要说的吗
作者: zjdyn    时间: 2015-7-17 14:52
学习了
作者: klyyz1980    时间: 2015-8-26 10:55
不行,报dm不是插件变量对象




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1