电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

开发手记:共享软件注册程序编写实例(2)


发布日期:2020/11/14
 

Option Explicit

Private Declare Function GetVolumeInformation Lib kernel _

Alias GetVolumeInformationA (ByVal lpRootPathName As String _

ByVal lpVolumeNameBuffer As String ByVal nVolumeNameSize As Long _

lpVolumeSerialNumber As Long lpMaximumComponentLength As Long _

lpFileSystemFlags As Long ByVal lpFileSystemNameBuffer As String _

ByVal nFileSystemNameSize As Long) As Long 等到某一磁盘分区的信息

************注册窗体*****************

运用另一个***mdb来控制软件是否超出试用期

Private Sub Form_Load()

根据C盘序列号得到原ID

Dim Driver VolName Fsys As String

Dim volNumber MCM FSF As Long

Driver = c:\

Dim res As Long

Dim localid As Long

res = GetVolumeInformation(Driver VolName volNumber MCM FSF Fsys )

将c盘序列号加密并显示在注册窗体的本机码中

localid = *****volNumber***** 加密算法

TextText = localid显示经加密后的本机码

End Sub

Private Sub cancel_Click()

On Error GoTo error

检测系统文件夹是否有***mdb文件如果没有则是系统第一次安装建立此数据库文件

If Dir(sPath & \*****) = Then

Dim ws As Workspace

Dim db As Database

Dim tdf As TableDef

Dim fld As Field

Dim rst As Recordset

DBEngine对象相当于Jet数据库引擎不需要创建该对象CreateWorkspace创建一个工作区对象

Workspace对象为用户定义一个会话通过与之关联的用户名和口令建立一个安全级别当不需要安全级别时可使用缺省的工作区DBEngineWorkspace()

Set ws = DBEngineWorkspaces()

创建一个空的数据库文件dbLangGeneral参数用来确定数据驱动程序支持的参数

Set db = wsCreateDatabase(sPath & \***mdb dbLangGeneral)

创建一张新表

Set tdf = dbCreateTableDef(***)

创建first_time字段

Set fld = tdfCreateField(first_time dbDate )

tdfFieldsAppend fld 把first_time字段添加到表中

创建last_time字段

Set fld = tdfCreateField(last_time dbDate )

tdfFieldsAppend fld 把last_time字段添加到表中

创建times字段

Set fld = tdfCreateField(times dbInteger )

tdfFieldsAppend fld 把times字段添加到表中

dbTableDefsAppend tdf 将***表添加到***mdb中

dbClose 关闭***mdb

Set db = wsOpenDatabase(sPath & \***mdb) 以可读写方式打开***mdb

Set rst = dbOpenRecordset(***) 打开一个记录集

With rst

AddNew 向记录集增加一条新记录

写入一条记录

Fields(first_time) = Date

Fields(last_time) = Date

Fields(times) =

Update 将记录写入数据库

End With

rstClose

dbClose 关闭***mdb

wsClose

**********更改系统时间来实现隐藏注册库的修改时间***************

………………………………………

…………………………………………

…………………………………………………

dbEncryptdbEncrypt (sPath & \***mdb) 数据库加密

Name sPath & \***mdb As sPath & \*****

********************将时间改会原来时间************************

…………………………

…………………………

MsgBox 这是你首次启动本系统!你的试用期为今天是第一天谢谢使用! vbOKOnly + vbInformation 欢迎!

***Show 启动主窗体

Else 系统有***mdb文件则不是第一次运行就不用建立数据库文件了

Dim ws As Workspace

Dim db As Database

Dim rst As Recordset

Dim num As Integer

dbEncryptdbExplain (sPath & \*****)

Set ws = Workspaces()

Set db = wsOpenDatabase(sPath & \*****)

Set rst = dbOpenRecordset(***) 开始检测用户是否修改了系统日期

rstMoveFirst

If rstFields(last_time) > Date Or rstFields(times) > Then

MsgBox 对不起你在本软件的试用期不可以修改系统日期否则将取消您的系统试用权如果你想继续使用本软件请您恢复系统日期谢谢合作! vbOKOnly + vbInformation 提示

End

End If

If Date rstFields(first_time) >= Then 设定试用期为

MsgBox vbCrLf & 你已经启动本系统 & rstFields(times) & 但已超过了软件天的试用期 & vbCrLf & vbCrLf & 如果您愿意继续使用本系统请将本机码以打电话(***********) & vbCrLf & vbCrLf & 或发邮件()的形式与***联系来得到注册码! vbOKOnly + vbInformation 提示

Else

仍在试用期内

num = rstFields(times)

rstEdit

rstFields(last_time) = Date

rstFields(times) = num +

rstUpdate

MsgBox 这是你第 & rstFields(times) & 次使用本系统你还有 & (Date rstFields(first_time)) & 天的试用期祝你今天工件愉快! vbOKOnly + vbInformation 提示

***Show 启动你的主窗体

End If

rstClose

dbClose

wsClose

***************更改系统时间来实现隐藏注册库的修改时间***************

……………………………………

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

dbEncryptdbEncrypt (sPath & \***mi) 加密数据库

Name sPath & \***** As sPath & \***** 因在前面改动时间会影响库中的时间故在这里做一下假改动来达到修改时间的目的

********************将时间改会原来时间************************

………………………………………

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

End If

Unload register 关闭注册窗口

Exit Sub

error:

dbEncryptSaveError Registercancel_Click

End Sub

Private Sub enter_Click()

On Error GoTo SaveErr:

进行注册验证注册ID

Dim ws As Workspace

Dim db As Database

Dim tdf As TableDef

Dim rst As Recordset

Dim fld As Field

Dim Driver VolName Fsys As String

Dim volNumber MCM FSF As Long

Driver = c:\

Dim res As Long

res = GetVolumeInformation(Driver VolName volNumber MCM FSF Fsys ) 得到硬盘序列号

Dim Tid As Long

Dim regid As String

Tid = Val(TextText)

regid = Trim(TextText)

If regid = ******************* Then 判断输入的密码是否同解密算法得到的密码一致

***********************更改系统时间来实现隐藏注册库的修改时间***************

………………………………

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

MsgBox 恭喜您已经注册成功欢迎使用水利工程投资控制与评审系统 vbOKOnly + vbInformation 提示

*****将注册信息写入密码注册库*****

dbEncryptdbExplain (sPath & \*****) 数据库解密

Set ws = DBEngineWorkspaces()

Set db = wsOpenDatabase(sPath & \*****)

Set rst = dbOpenRecordset(***)

rstMoveFirst

rstEdit

rstFields(***) =

上一篇:Net反射在项目中的应用

下一篇:DataGridView的常用用法