关于VBS调用MSWinsock控件(转)
2007-08-22 20:38
507 查看
关于VBS调用MSWinsock控件
Windows脚本可以调用MSWinsock控件获得比较强大的网络访问能力,但那个106KB的mswinsck.ocx(V6.0.89.88)不是系统自带的,这使得该控件的实用性大打折扣。而且,脚本要调用MSWinsock还必须克服一个困难。以"MSWinsock"为关键字,使用百度搜索网页,可以获得至少3个VBS调用MSWinsock控件的例子:获取本机IP、端口扫描和发在"黑防"的《VBS+MSWinsock打造灵巧UDP后门》。但是,当你下载并注册mswinsck.ocx,然后尝试那些代码时,却会得到一个"类别未授权使用(Class is not licensed for use)"错误,错误号0x80040112。那些代码的作者似乎都以为MSWinsock和一般的控件一样,只要用regsvr32注册就能正常使用了,没有实际测试它的可移植性。而转贴文章的人,更不会关心内容是否可靠,一味地复制粘贴而已。结果,网上所有关于VBS调用MSWinsock的例子都是"空中楼阁",没有一个跑的起来。国内如此,国外也一样。所有对该控件无法使用的质疑,都被人以"需要注册"为理由打发了。当然,也有了解"真相"的人,但其给出的解决方案竟然是用VB重新写个ocx封装MSWinsock,这实在是@#$%^&!。
那么,"真相"究竟是什么?搜索"类别未授权使用"和错误号,这是个好主意,但结果不理想。我们需要逆向思考,为什么原作者不会遇到错误。答案是原作者的mswinsck.ocx不是单独注册的,而是随VB一起安装的。其中的差别在于,后者会安装VB控件的设计时许可证(design-time license)。ActiveX控件的License有两种:设计时(design-time)和运行时(run-time)。当编译调用了某个控件的exe/dll/ocx时,编译器会自动加入该控件的运行时许可证,所以"重新写个ocx封装MSWinsock"这个办法可行。使用脚本直接调用MSWinsock时没有运行时许可证,这时脚本宿主会尝试在注册表中获取设计时许可证,单独注册的MSWinsock没有相应的设计时许可证,所以就出错了。
在VS.NET安装盘里有VB6控件的授权密钥(/Extras/VB6 Controls/VB6Controls.reg),导入注册表后就能正常使用包括MSWinsock在内的VB6控件了。
下载mswinsck.ocx与VB6Controls.reg:
http://zzzevazzz.bokee.com/inc/vb6controls.rar
Trackback
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=867101相关文章推荐
- 关于VBS调用MSWinsock控件
- 关于OCX控件在ie下调用不了接口的解决方法
- 关于多控件调用同一个事件的问题
- 关于C#中webbrower控件调用的浏览器不支持热力图功能的解决办法
- [Javascript]关于在ASP.NET环境中调用梅花雨的日历控件出错的解决办法
- 农民伯伯--关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值 一点点经验
- 关于用户控件中调用不同页面的方法
- 关于调用控件 jacob.jar 导入
- 关于WebBrowser(浏览器)控件的调用
- 关于WebBrowser(浏览器)控件的调用
- 获取iframe中的内容、查找获取指定元素(关于用c++调用WEBBROWSER控件,使用相关接口操作web页面元素的一些方法)
- 关于UI控件跨线程调用
- 关于VBS调用MSWinsock控件
- 关于对话框的知识(函数的调用机制和控件的使用)
- 关于在窗体中使用多线程调用控件的方式
- 关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用
- 关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值 一点点经验
- 关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值 一点点经验
- 关于配置部署.net项目调用OFFICE的COM控件
- 关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值 一点点经验