在我们大量使用的 Windows 95/98、NT或更高版本的Windows操作系统中,注册表是保存系统的软硬件配置信息和用户信息的数据库。注册表中的数据决定了它就是Windows操作系统的最核心部件,应用程序都选择在注册表中保存其配置参数。我们当然也可以利用注册表的特性来为应用程序加上使用期限,以保障软件作者的利益。 以下仅以Visual FoxPro的应用程序为例,介绍此类方法。在本例中,我们为这个应用程序添加一个直到2000年10月25日前都可以运行的条件,过了这个日期后,该软件将自动结束并提示用户注册。
我们需要先编写一注册表文本文件(.reg)。 在注册表文本文件的首行必须用命令字符串“REGEDIT",它的作用是告诉系统调用regedit来完成注册信息的合并工作。接下来的每一行或者代表一个键值的声明,或者是注释性的说明信息。 主键及其默认键值的声明格式的规则是: 根键一级主键二级主键......=默认键值 根据此规则,我们编写了注册表文本文件regdemo.reg,内容为: REGEDIT4 [HKEY-CURRENT-USERSoftwareljiSoftwarelji] ″enddate″=″2000/10/25″ 运行这个.reg文件,enddate的信息即可注册到注册表主键“HKEY-CURRENT-USERSoftwareljiSoftwarelji”中。 然后要为你的应用软件编写一个入口程序,具体内容是: Clear ALL CLOSE data -SCREEN.windowstate=2 SET CENTURY ON SET DATE TO YMD *--------------- #DEFINE HKEY-CLASSES-ROOT -2147483648 #DEFINE HKEY-CURRENT-USER -2147483647 #DEFINE HKEY-LOCAL-MACHINE -2147483646 #DEFINE HKEY-USERS -2147483645 #DEFINE ERROR-SUCCESS 0 *--------------- IF !register() RETURN .t. ENDIF *--------------- FUNCTION register enddate=‘‘ SET proc to registry *--------------- frmMyForm = CREATEOBJECT(″registry″) frmMyForm.init() enddate=‘‘ frmMyForm.GetRegKey(″enddate″,@enddate,″SoftwareljiSoftwarelji″,HKEY-CURRENT-USER) IF enddate=‘‘ =messsagebox(‘系统还没有注册‘,64,‘系统提示‘) ELSE =messsagebox‘系统使用期限为:‘+enddate,64,‘系统提示‘) ENDIF SET proc to IF enddate=‘‘ MESSAGEBOX(‘您还没有取得系统使用权!‘+chr(13)+‘请与软件作者联系‘,0+16,‘提示‘) RETURN .f. ELSE IF date()>ctod(enddate) MESSAGEBOX(‘系统使用期限已到!‘+chr(13)+‘请与软件作者联系‘,0+16,‘提示‘) RETURN .f. ELSE RETURN .t. ENDIF ENDIF 需要注意的是:这里的registry是一个自定义类库对象,限于篇幅,不在此列出其代码,大家如果感兴趣,可以在Visual FoxPro的安装目录下的SAMPLECLASSES子目录中找到一个名为registry.prg的示例程序。