这是原来从网上搜集、整理后编制用于自己的小程序使用的OCX是否注册及未注册控件的自动注册函数。

CheckCtrlFileRegist("ctToolBar.ctToolBarCtrl.4")  && 检测与注册DBI工具条控件(ctToolBar)

****************************** 控件注册函数
Function CheckCtrlFileRegist
Parameters lcCheck

&& 调用形如:CheckCtrlFileRegist("ctGrid.ctGridCtrl.3")
&& 其中,经常用到的控件如下:
&& MS日期控件 MSComCt2.OCX 版本2-("MSComCtl2.DTPicker.2")(MS Date and Time Picker Control 6.0 (SP4))
&& 视频头控件 AVCap.OCX 版本1-("AVCap.AVCapture.1")
&& DBI表格控件 ctGrid.OCX 版本3-("ctGrid.ctGridCtrl.3"),版本1-("ctGrid.ctGridCtrl.1")
&& DBI下拉框控件 ctCombo.OCX 版本2-("ctCoLorCombo.ctColorComboCtrl.2")
&& DBI工具条控件 ctToolBar.OCX 版本4-("ctToolBar.ctToolBarCtrl.4")
&& DBI树形控件 ctTree.OCX 版本7-("ctTree.ctTreeView.7")

Local oErr As Exception, oErrExit As Exception
Local lcCtrlFile As Character, lcCtrl As Character, lcRun As Character
Local oCtrl As Object, oShell As Object
Local lcMess As Character

lcMess=''
lcCtrl=SubStr(lcCheck,1,At('.',lcCheck,1)-1)

Try
  oCtrl=CreateObject(lcCheck)
Catch To oErr
  oErr.UserValue="发现OCX控件["+lcCtrl+"]未注册!"
  =MessageBox(oErr.UserValue,0+64,'提示!')
  Do While .T.
     lcCtrlFile=GetFile('OCX','输入文件名:','确定',0,'选择需要操作的文件')
     If Not File(lcCtrlFile,1) OR Empty(lcCtrlFile) Then
        lcMess='程序所必要的控件文件'+Iif(Empty(lcCtrlFile),'','['+lcCtrlFile+']')+'不存在!继续注册么?'
        If 6=MessageBox(lcMess,4+32+256,'系统提示!') Then
           Loop
        Else
           Quit
        Endif
     Endif
     oShell=CreateObject('Wscript.shell')
     lcRun="Regsvr32 /S "+lcCtrlFile
     If oShell.Run('&lcRun',0,.T.) != 0 Then && 隐藏窗口运行并返回错误代码(不为0,运行出错,注册失败)
        lcMess='选定的控件文件'+lcCtrlFile+'不包含控件'+lcCtrl+', 注册失败!继续注册么?'
        If 6=Messagebox(lcMess, 4+32+256, '信息提示') Then
           Loop
        Else
           Quit
        Endif
     Endif
     Try
       oCtrl=CreateObject(lcCheck)
     Catch To oErrExit
       oErrExit.UserValue = "OCX控件["+lcCtrl+"]未注册成功 或 与要求版本不符合!"
       =MessageBox(oErrExit.UserValue,0+64,'提示!')
       Quit
     Finally
     EndTry
     lcMess='控件['+lcCtrl+']注册成功!'
     =MessageBox(lcMess, 0+64, '系统提示!',5000)
     Exit
  EndDo
Finally
  Release oErr, oErrExit, lcCtrlFile, lcCtrl, lcRun, oCtrl, oShell, lcMess
EndTry
EndFunc

*************************

下面是网上摘抄的红雨先生的一个关于控件注册的函数,一并列示如下(本人未对该函数作过测试,对该函数的控件版本检测功能亦未判断,有兴趣者测试后可在此回复给我,谢谢):

* 程序: 动态注册(dll、ocx)控件
* 设计: 红雨
*-------------------------------------------------
Clear
cLibFileName = getfile([注册控件(*.ocx,*.dll):ocx,dll],[控件文件])
If  !Empt(lcLibFileName)      
? DllRegister(lcLibFileName,.T.)  && 注册
*? DllRegister(lcLibFileName,.F.)  && 注销
Endif
Clea Dlls
Return

Function DllRegister (lpLibFileName,isReg)
isReg = iif(type("isReg")="U", .T., isReg)
lpProcName = iif(isReg, "DllRegisterServer", "DllUnregisterServer" )
Declare Integer GetLastError in kernel32
Declare Integer LoadLibrary in kernel32 String lpLibFileName
Declare Integer FreeLibrary in kernel32 Integer hLibModule
Declare Integer GetProcAddress in kernel32 Integer hModule, String lpProcName
Declare Integer CallWindowProc in user32 Integer lpPrevWndFunc, Integer hwnd, Integer Msg, Integer wParam, Integer lParam
hLibModule = LoadLibrary (lpLibFileName)
If hLibModule # 0
   lnAddress = GetProcAddress (hLibModule, lpProcName)
   If lnAddress # 0        
      If CallWindowProc( lnAddress, 0,0,0,0) = 0          
         = FreeLibrary (hLibModule)               
         Return "成功: " + lpProcName + " 地址: " + allt(str(lnAddress,12))
      Else
         lnerror = GetLastError()
      Endif
   Else
      lnerror = GetLastError()
   Endif
   = FreeLibrary (hLibModule)
Else
   lnerror = GetLastError()
Endif
Return "错误: (" + allt(str(lnerror)) + []) + GetErrorStr(lnerror)
End func
**************************

Function GetErrorStr (lpnError)
Declare INTEGER FormatMessage IN kernel32 INTEGER dwFlags, INTEGER lpSource, INTEGER dwMessageId,;
        INTEGER dwLanguageId, INTEGER @lpBuffer, INTEGER nSize, INTEGER  Arguments
Declare RtlMoveMemory IN kernel32 As CopyMemory STRING @Destination, INTEGER Source, INTEGER nLength
dwFlags = 256 + 4096 + 512
lpBuffer = 0
lnLength = FormatMessage(dwFlags, 0, lpnError, 0, @lpBuffer, 0, 0)
If lnLength <> 0
   lpResult = REPLI (Chr(0), 500)
   = CopyMemory (@lpResult, lpBuffer, lnLength)
   Return STRTRAN(LEFT(lpResult, lnLength), Chr(13)+Chr(10), "")
Else   
   Return "#<未知错误>#"
Endif
Endfunc

VFP中OCX控件注册检测及自动注册的更多相关文章

  1. C++ OCX控件开发后出现的注册问题

    error MSB3075: 命令“regsvr32 /s /c "F:\JOBS\项目\格网数据的动态三维可视化\Dev\GridDynamicDisplay\gdiplusplot\GD ...

  2. Xcode中给控件添加颜色时自动显示出颜色

    在iOS开发中,给一些控件设置颜色的时候,设置完不能立马看到颜色.必须要运行程序之后才能看到设置的颜色,如果颜色有偏差再回代码改参数,然后再运行看颜色很是麻烦.令人高兴得是Xcode有很多功能强大插件 ...

  3. 031. aps.net中数据绑定控件两种添加自动编号的方法

    前端HTML代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defaul ...

  4. vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50802280   js调用ocx控件的接口函数,先看demo效果:      简单测试过程 ...

  5. 在 浏览器中调用外接设备— —手写板 【win10 x64 手动注册ocx控件的方法】

    PPAXSignToolSDK.ocx 浏览器下使用手写板时调用的控件,使用前必须先注册,,不然浏览器下版本无法正常工作. ocx 控件在安装包运行时会自动注册,如果安装包没有注册成功,需要进行手动注 ...

  6. Html页中使用OCX控件

    原文:http://blog.csdn.net/mouse8166/article/details/5515657 最近准备开发一个b/s架构的应用程序需要用到activeX控件,web服务器尚未进入 ...

  7. 如何注册dll、ocx控件

    在程序集成时,有时需要对厂家提供的dll或者ocx控件进行注册.其一般操作为:开始>命令指示符(右击管理员身份运行)>regsvr32 文件路径. 比如对devocx.ocx进行注册,在F ...

  8. OCX控件的注册卸载,以及判断是否注册

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx     //注册netshare.ocx控件regsvr ...

  9. VC++如何在程序中用代码注册和卸载ocx控件(代码)

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx     //注册netshare.ocx控件regsvr ...

随机推荐

  1. Could not find iPhone 6 simulator

    最近原来的老项目有点问题需要处理一下,运行启动命令,就报了如下错误,提示找不到iPhone 6 模拟器. react-native run-ios Owaiss-Mac:pdm owaisahmed$ ...

  2. Java框架之Spring02-AOP-动态代理-AspectJ-JdbcTemplate-事务

    AOP 动态代理 代理设计模式的原理:使用一个代理将原本对象包装起来,然后用该代理对象”取代”原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上. 代理模式的 ...

  3. swagger生成错误问题 汇总解决

    Unable to render this definition The provided definition does not specify a valid version field. Ple ...

  4. scratch3.0二次开发scratch3.0基本介绍(第一章)

    为什么要自己开发而不使用官方版本? 这个问题要看我们的做少儿编程教育的需求是怎么样的. scratch本身提供了离线版本以及官网在线平台供我们使用,这足以满足我们对于编程教学模块的需求.但是对于一些教 ...

  5. python 学习爬虫教程~

    思路:: (本文没有用xpath定位,xpath需要导入第三方库   from lxml import etree) 1.首先通过urllib类获取到网页的所有内容 2.通过partition获取其中 ...

  6. 利用 sklearn 生成交叉特征:

    ------------------------------------- ------------------------------------- ------------------------ ...

  7. Qt Installer Framework翻译(3-1)

    初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...

  8. 清晰架构(Clean Architecture)的Go微服务: 事物管理

    为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...

  9. 异数OS 2017 DPDK 峰会观后感

    1.DPDK in Container 使用虚拟网卡设备技术为每一个容器分配一个IP 网卡适配器(queue).容器技术可以解决虚拟机技术中虚拟机过于臃肿,难于热迁移的问题,可能可以代替美团OVS方案 ...

  10. Sublime Text 3 部分安装过程记录

    概览: Sublime Text 3下载网址 Package Control的安装 Install Package报错(There are no packages availabel for inst ...