| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1922 人关注过本帖, 2 人收藏
标题:高手指教:VFP9如何判断一个控件(.ocx)是否注册?
只看楼主 加入收藏
hrer
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2010-4-20
结帖率:0
收藏(2)
已结贴  问题点数:20 回复次数:3 
高手指教:VFP9如何判断一个控件(.ocx)是否注册?
高手指教:
VFP9如何才能判断一个控件(.ocx或.dll)是否注册?,有实现的函数吗?
搜索更多相关主题的帖子: 注册 函数 如何 
2011-06-15 14:45
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:20 
可以参考这个帖子:
http://www.

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-06-16 09:14
hrer
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2010-4-20
收藏
得分:0 
&&我自己在网上找了一个,问题已解决并与各狐友分享:

IF IsOleReg('农历控件.Calendar')   && IsOleReg()是自定义的一个函数。
   =MESSAGEBOX("控件 Calendar 已经注册",64,"信息提示")
ELSE
   =MESSAGEBOX("控件 Calendar 没有注册",48,"信息提示")
ENDIF


*本程序也可以检查DLL有没有被注册,以收发邮件的jmail.dll为例
*if IsOleReg('jmail.SMTPMail')   &&参数也可以用jmail.POP3
*   =MessageBox("jmail.dll 已经注册",64,"信息提示")
*else
*   =MessageBox("jmail.dll 没有注册",48,"信息提示")
*endif

FUNCTION  IsOleReg

LPARAMETERS OleClsName

DECLARE INTEGER RegOpenKeyEx IN advapi32 INTEGER nKey,STRING @cSubKey,INTEGER nReserved,INTEGER nAccessMask,INTEGER @nResult

DECLARE LONG RegCloseKey IN advapi32 INTEGER nHKey

#DEFINE HKEY_CLASSES_ROOT -2147483648

LOCAL lnHKEY,lnRes,lcName1,lcGUID,guiddesc,OcxFile

*在 HKEY_CLASSES_ROOT\MSComctlLib.TreeCtrl.2中查找控件的名称

lnHKEY=0

lnRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,OleClsName,0,131097,@lnHKey)

IF lnRes<>0
   RETURN .F.
ENDIF

lcName1=GetRegVal(lnHKey,'')

RegCloseKey(lnHKey)

IF ISNULL(lcName1)
   RETURN .F.
ENDIF

*在HKEY_CLASSES_ROOT\MSComctlLib.TreeCtrl.2\CLSID中查找控件的类标识符 GUID

lnRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,OleClsName+'\CLSID',0,131097,@lnHKey)

IF lnRes<>0
   RETURN .F.
ENDIF

lcGUID=GetRegVal(lnHKey,'')
RegCloseKey(lnHKey)

IF ISNULL(lcGUID)
   RETURN .F.
ENDIF

*在 HKEY_CLASSES_ROOT\CLSID\… 中查找控件的类标识符 GUID 的备注

lnRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,'CLSID\'+lcGUID,0,131097,@lnHKey)
IF lnRes<>0
   RETURN .F.
ENDIF

guiddesc=GetRegVal(lnHKey,'')
RegCloseKey(lnHKey)

IF ISNULL(guiddesc)
   RETURN .F.
ENDIF

*在 HKEY_CLASSES_ROOT\CLSID\…\InprocServer32 中查找控件的文件名(含路径)

lnRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,'CLSID\'+lcGUID+'\InprocServer32',0,131097,@lnHKey)

IF lnRes<>0
   RETURN .F.
ENDIF

OcxFile=GetRegVal(lnHKey,'')

RegCloseKey(lnHKey)

IF ISNULL(OcxFile)
   RETURN .F.
ENDIF

IF FILE((OcxFile))
    RETURN .T.
ELSE
    RETURN .F.
ENDIF

ENDFUNC

PROCEDURE GetRegVal(nHKey,cProperty)

LOCAL Result,lcValue,lnValLen,lnType

DECLARE INTEGER RegQueryValueEx IN advapi32 INTEGER nKey,STRING cValueName,INTEGER nReserved,INTEGER @nType,STRING @cBuffer,INTEGER @nBufferSize

IF ISNULL(nHKey)
    RETURN .NULL.
ENDIF

lnType=1
lcValue=space(255)
lnValLen=255
result=RegQueryValueEx(nHKey,@cProperty,0,@lnType,@lcValue,@lnValLen)

IF result=0 and lcValue<>CHR(0)
   lcValue=Left(lcValue,lnValLen-1)
   RETURN lcValue
ELSE
   RETURN .NULL.
ENDIF

ENDPROC
2011-06-16 11:56
risen1321203
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-1-7
收藏
得分:0 
你好,正在为VFP程序中检测控件是否注册所困惑,看到你的程序,但是我用了,也注册了,总是提醒‘没有注册’,不知哪出了问题。
IF IsOleReg('mscomctl.ocx')   && IsOleReg()是自定义的一个函数。
   =MESSAGEBOX("控件 mscomctl.ocx 已经注册",64,"信息提示")
ELSE
   =MESSAGEBOX("控件 mscomctl.ocx 没有注册",48,"信息提示")   
   RUN /n regsvr32 /s mscomctl.ocx &&注册 mscomctL.ocx   
ENDIF

后面和你的函数是一样的,是不是目录有问题?请指教,谢谢
2022-01-07 20:12
快速回复:高手指教:VFP9如何判断一个控件(.ocx)是否注册?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016542 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved