程序要动态检测一个控件是否注册,如果没注册则执行注册
该如何做?

解决方案 »

  1.   

    简单的方法就是调用它一下,然后进行错误捕捉。如果出错,就调用 regsvr32 注册一下。dim x as objecton error goto noreg
    set x=createobject("aaa.bbb")   'aaa.bbb 是你要调用的组件
    ...noreg:
    shell "regsvr32 /s abc.ocx"
    resume 
    复杂的方法就要用很多API,很麻烦
      

  2.   

    VB编程动态注册ActiveX控件
    VB编程动态注册ActiveX控件 
    在使用VB和其它一些Win9X下的编程软件,就要同ActiveX控件打交道,注册 
    和反注册控件是一件令人很头疼的事情。有时从网上下载了一个控件,但是在使用 
    时VB总是提示控件没有注册。又或者想删除一个控件却无法从注册中抹去。 
    实际上,每一个ActiveX控件都有两个输出函数:DllRegisterServer和 
    DllUnRegisterServer。顾名思义,通过这两个函数就可以注册和反注册控件了, 
    下面通过程序说明如何通过编程来注册。 
    首先在Form中加入两个CommandButton,不要改变它们的属性。然后在Form中 
    加入如下代码: 
    Private Declare Function RegComCtl32 Lib "ComCtl32.OCX" _ 
    Alias "DllRegisterServer" () As Long 
    Private Declare Function UnRegComCtl32 Lib "ComCtl32.OCX" _ 
    Alias "DllUnregisterServer" () As Long 
    Private Declare Function FormatMessage Lib "kernel32" _ 
    Alias "FormatMessageA" (ByVal dwFlags As Long, _ 
    lpSource As Any, ByVal dwMessageId As Long, _ 
    ByVal dwLanguageId As Long, ByVal lpBuffer _ 
    As String, ByVal nSize As Long, Arguments As _ 
    Long) As Long 
    Private Declare Function GetLastError Lib "kernel32" () As Long Const ERROR_SUCCESS = &H0 Private Sub Command1_Click() 
    Dim astr As String \'\'反注册ComCtl32.Ocx 
    If RegComCtl32 = ERROR_SUCCESS Then 
    MsgBox "注册成功" 
    Else 
    astr = String$(256, 20) 
    FormatMessage FORMAT_MESSAGE_FROM_SYSTEM Or _ 
    FORMAT_MESSAGE_IGNORE_INSERTS, 0&, GetLastError, _ 
    0&, astr, Len(astr), ByVal 0 
    MsgBox astr 
    End If 
    End Sub Private Sub Command2_Click() 
    Dim astr As String \'\'反注册ComCtl32.Ocx 
    If UnRegComCtl32 = ERROR_SUCCESS Then 
    MsgBox "反注册成功" 
    Else 
    astr = String$(256, 20) 
    FormatMessage FORMAT_MESSAGE_FROM_SYSTEM Or _ 
    FORMAT_MESSAGE_IGNORE_INSERTS, 0&, GetLastError, _ 
    0&, astr, Len(astr), ByVal 0 
    MsgBox astr 
    End If 
    End Sub 
    运行程序,点击Command2反注册ComCtl32.Ocx控件,在VB菜单中选 Project|components 
    或按Ctrl+T,在控件列表框中可以看到已经没有ComCtl32.Ocx了。再运行程序,点击Command1 
    重新注册控件。 
      

  3.   

    上面两种方法都不是太好 TO:fxy_2002(阿勇)
    regsvr32 会弹出对话框,用户觉得不爽TO:mmcgzs(毛毛虫:唯一一种长有绒毛的爬行动物!) 
    如果我有多个控件,该如何声明 DllRegisterServe heddfdgdf
      

  4.   

    楼主试过代码吗?
    regsvr32 带 /s 参数是不会出现对话框架的。