`
xylw
  • 浏览: 60220 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
文章分类
社区版块
存档分类
最新评论

VB实现自我注册控件,即使使用控件也能做绿色软件

阅读更多
本文讲解程序自动监测系统是不是有此控件,如果没有,则自动注册此控件。这样就可以实现即使带控件也能实现做绿色软件。

VB编程中合理的使用第三方控件,往往能够事半功倍。但是使用第三方控件也有不好的地方,那就是为了保证程序正常运行,必须使程序能够在系统目录或程序目录下找到所用的第三方控件。要做到这一点通常有两种办法:一是把控件和程序制成一个压缩包发行,这样的缺点是有可能导致在程序传播过程中丢失控件文件。二是制作安装程序,缺点是制作过程烦琐。而且上面两种办法也不符合绿色软件的要求。所谓的绿色软件是指软件只有单个可执行文件且无须安装,目前很受用户欢迎。那么有没有办法在使用了第三方控件的情况下实现绿色软件梦呢?答案是有。

  做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前将所用到的控件生成到该程序目录下,完成控件从可执行文件中的金蝉脱壳。

  具体做法如下:

  第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。

  第二步:引用并正常使用该控件。

  第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义资源(CUSTOM),资源号使用默认的101。如果使用了多个控件则分别添加到资源文件的101、102......资源项中,脱壳代码也要作相应的修改。

  第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。

  代码如下:

Private Const OCXSIZE = 57344 '欲生成的控件大小是57344Byte,名字为CoolToolBar.ocx注意你的控件到底多大不一样的控件或不一样的版本

Sub Main()          '注意要放到sub main中而不要放到form_load中,还要记得要把启动对象改成sub main
 Dim Ocx() As Byte 'OCX是个Btye类型的数组
 Dim Counter As Long
 Ocx = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组OCX
 '注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说的数字10

 If Right(App.Path, 1) = "\") Then '读取程序所在路径,判断是否为根目录并分别处理
  '程序在根目录下
  If Dir(App.Path & "CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
   '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录 
   Open App.Path & "CoolToolBar.ocx" For Binary As #1 
   For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
    Put #1, , Ocx(Counter)
   Next Counter
   Close #1
  End if 
 Else
  '程序不在根目录下
  If Dir(App.Path & "\CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
   '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录 
   Open App.Path & "\CoolToolBar.ocx" For Binary As #1
   For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
    Put #1, , Ocx(Counter)
   Next Counter
   Close #1
  End if
 End if
 Form1.Visible = True '主程序所用控件已经生成,显示主窗体,进入主程序。
End Sub 


  注意:将以上代码作为一个模块添加到工程中,并在工程-工程属性设置中将启动对象选为Sub Main,即上面的脱壳代码。然后编译生成EXE文件,将该EXE文件拷贝到其他没有安装所用控件的计算机上运行一下看看是否实现了控件携带之金蝉脱壳。如果是那么OK!以上为使用一个控件的情况,使用多个控件方法基本相同,大家可以自己做一下。

分享到:
评论

相关推荐

    VB 设计注册ActiveX控件程序, 以及Vb常用的ocx控件合集

    这是使用VB 设计的注册ActiveX控件软件, 包含VB 调用系统命令的使用, 并使用了VB获取系统路径, 调用API函数, 复制文件等高级功能。 本资源还包含了一些VB常用的ActiveX控件, 如Flash8.ocx, comctl32.ocx, mci32.ocx,...

    vb6.0缺少的控件注册

    4. 在VB6.0中添加引用:回到VB6.0开发环境,打开“工程”菜单,选择“部件”,在打开的对话框中,你应该能看到刚才注册的控件。选中它并点击“确定”,控件就会出现在工具箱中,可以用于设计界面。 5. 测试控件:...

    VB-CAD.rar_VB CAD 控件_VB绘图控件_cad 控件_cad控件_seedwg

    在提供的标签中,"vb_cad_控件"、"vb绘图控件"、"cad__控件"和"cad控件"进一步强调了这个资源的核心特性,即使用VB开发的CAD相关控件。而"seedwg"可能是这个控件的特定模块或者函数,用于处理DWG文件。 尽管压缩包...

    VB控件教程 VB控件大全 VB控件详解 VB控件用法 所有控件介绍

    总之,VB控件是构建VB应用程序的基础,理解并熟练掌握控件的使用,能够帮助开发者更高效地创建出功能丰富、用户体验良好的Windows应用。通过深入学习VB控件教程、控件大全以及相关资源,你可以进一步提升自己的编程...

    VB程序控件自动注册,控件存在程序中

    在这种情况下,我们需要对这些控件进行注册,以便VB程序能够识别并正确地使用它们。 "VB程序控件自动注册"是一种技术,允许程序在运行时检查系统是否已经安装了特定的控件。如果系统中没有找到这些控件,程序会自动...

    VB .net SerialPort控件使用详解

    在VB2008中使用SerialPort控件可以实现串口的接收和发送操作。但是,在使用过程中需要注意一些重要的细节,否则可能会出现数据丢失、串口通信失败等问题。 首先,SerialPort控件的DataReceived事件是串口接收到数据...

    vb6.0用户控件自定义控件

    通过创建用户控件和自定义控件,我们可以构建具有独特功能和外观的控件,这些控件可以像标准VB控件一样在窗体上使用。 **用户控件(User Control)** 用户控件是一种复合控件,它将多个标准VB控件组合在一起,形成一...

    vb控件自动注册

    下面将详细介绍VB控件自动注册的相关知识点。 1. **控件注册过程**: - 当一个控件(如DLL或OCX)被添加到VB项目中时,VB会尝试在系统注册表中创建相应的条目,这些条目包含了控件的类ID(CLSID)、接口ID(IID)...

    VB 实现绘制曲线图控件

    本主题将深入探讨如何使用Visual Basic 6.0(VB6.0)来实现这一功能,特别是通过创建自定义控件来绘制曲线图。我们将分析提供的三个不同控件和实例,即MSCHRT20曲线示例、贺兰_实时曲线控件以及Plotline控件实例,以...

    vb控件使用大全

    VB控件使用大全,这是一份专为Visual Basic(VB)开发者准备的资源,涵盖了VB控件的广泛使用和深入理解。VB控件是构建用户界面的重要元素,它们允许程序员通过图形化方式创建功能丰富的应用程序。这份资料可能包含了...

    vb.net像VB6一样使用控件数组

    ### vb.net中实现类似VB6的控件数组功能 #### 背景介绍 在经典编程语言Visual Basic 6.0(简称VB6)中,控件数组是一种非常实用的功能,它允许开发者创建一系列具有相同名称但不同索引的控件。这种方式极大地简化了...

    VB_6.0_控件参考手册.pdf_控件_手册_VB_

    总之,《VB_6.0_控件参考手册》是VB6开发者不可或缺的工具书,它将帮助读者全面掌握VB6控件的使用,提升软件开发的专业水平。通过深入学习和实践,开发者不仅可以熟练运用各种控件,还能根据需求灵活设计出用户友好...

    VB6.0运行在WINDOW平台安装注册的控件.

    标题“VB6.0运行在WINDOW平台安装注册的控件”指的是在Windows操作系统上使用Visual Basic 6.0(简称VB6.0)进行软件开发时,遇到的一个常见问题:某些自定义或非标准的控件无法正常显示。在VB6.0中,开发者除了可以...

    VB农历日期控件

    VB农历日期控件是Visual Basic(VB)编程环境中用于显示和处理中国农历日期的一种软件组件。在VB应用程序中,开发者可以利用这样的控件为用户提供农历日期的显示、选择和计算功能,尤其对于需要处理农历信息的系统,...

    VB注册系统服务控件

    在实际开发中,使用VB注册系统服务控件可以大大减少编写代码的工作量,提高开发效率,同时也降低了出错的可能性。不过,需要注意的是,创建系统服务需要管理员权限,因此在实际部署时,需要确保应用程序有足够的权限...

    OCX.rar_VB 曲线图_VB 曲线控件_vb曲线图控件_曲线 控件_曲线图

    1. 添加控件:将"OCX"文件注册到系统中,然后在VB工程的工具箱中,控件应该会自动出现,可以选择并拖放到窗体上。 2. 设置属性:通过属性窗口调整曲线图的外观和行为,如颜色、线条样式、坐标轴范围等。 3. 编写代码...

    C#变通方法实现VB6.0里面的控件数组,VB.net也同样

    在VB6.0中,控件数组是一种非常方便的方式来管理一组功能相似的控件,比如多个按钮或文本框。每个控件在数组中都有一个唯一的索引,可以通过这个索引来访问和操作它们。然而,C#语言并没有直接提供与VB6.0中相同的...

    vb6.0用户自定义控件

    开发者可以在设计时或运行时对这些控件进行操作,就像操作标准的VB控件一样。 "jcbutton" 控件可能包含了一些扩展特性,比如动画效果、自定义样式、菜单功能等,这些都是标准VB6.0 Button控件所不具备的。要实现...

    VB6.0使用winsock控件实现聊天程序(源代码)

    在VB6.0中,我们可以利用Winsock控件来实现网络通信功能,如创建一个简单的聊天程序。本文将深入探讨如何利用VB6.0和Winsock控件构建一个多客户端通信的聊天程序,并针对描述中提到的问题进行分析。 1. Winsock控件...

    免费的VB 第三方控件大全 rar

    最后,我们不得不强调的是,在使用第三方控件时,开发者们应当仔细阅读控件的使用说明和许可协议,确保这些控件的使用符合自己的开发需求以及项目授权要求。同时,合理地选择和集成控件,避免过度依赖控件而忽视了...

Global site tag (gtag.js) - Google Analytics