北京双语生物教师招聘:如何用vb实现软件使用时间限制

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 13:38:41
如何用vb实现软件使用时间限制
如以30天为例,如何用vb实现使软件有30天的使用时间限制
要源代码,在线等。
答得好有追加分。

第一种方法:在程序中设置一下固定时间,在程序启动的时候和系统当前时候做一下比较,根据判断结果决定程序继续运行或退出。不过这种方法很容易通过修改系统当前时间来绕过去。
第二种方法:是在程序初次安装或运行时,在注册表或磁盘上一个隐蔽的文件中,记录下程序的运行次数,每运行一次程序,将次数加1,然后根据程序运行次数决定程序是否运行。

A: 应有的功能:

1) 给定一个试用期限,在系统每次启动时会判断软件已经使用了几天,还有几天可用以及启动的次数.

2) 当系统日期被修改成往日的日期后,系统能自动判别,禁止修改日期,不于正常启动.
3) 当试用期到,显示信息,不于启动程序.B:简单的思路
1) 在系统第一次运行时,在一个隐蔽的地方(如: c:\windows\system)建立一个用以记录系统信息的数据库文件,如date.mdb,使用一张表date,有三个字段first_time,last_time和times.其中first_time为系统第一次启动时的日期,即试用期的第一天.last_time为系统最近一次启动的时间,而times为记录系统启动的次数.

2) 系统每次启动会检测当前的日期同last_time做比较,如果当前的日期(如00/09/30)比last_time(如00/10/01)还旧,说明系统的日期被推后,显示信息,不于启动系统.反之,则转入第三步.

3) 取出数据库中的first_time,同当前的日期做减法运算,看所的的天数是否在使用期限内.如果在,则转入第四步,否则显示信息,不于启动系统.

4) 修改数据库的last_time字段为当前的日期,显示系统已经使用的情况,正常启动系统.

好了,罗罗嗦嗦讲了一大统,我想,大家一定都明白了,怎么样,我说不难吧,根本不用修改系统的注册表.只要大家把date.mdb藏好了,不被发现就万事大吉了.而且你可以给这个数据库加上密码,然后把first_time,last_time,times的字段名改个面目全非,就算有高手发现了数据库,破解了密码,他也不知道这三个字段的含义和这个数据库是那个软件所带的文件,呵呵,不说了,还是看看我的源码吧:

在您的工程中,请以SUB MAIN()启动程序.(什么,怎么设置,呵呵,"工程"==>"工程属性"==>"启动窗体")

Sub main()
On Error GoTo error
'系统检测是否有date.mdb文件,如果没有,则是系统第一次启动,则建立之
If Dir("c:\windows\system\date.mdb") = "" Then

'注意在开始,您要确定您的工程引用了Microsoft dao 2.5/3.5 compatibility library 在"工程"==>"引用"中.

Dim WS As Workspace
Dim DB As Database
Dim TD As Tabledef
Dim FLD As Field
Dim IDX As Index
Dim rd As Recordset
Set WS = DBEngine.Workspaces(0)
Set DB = WS.CreateDatabase("c:\windows\system\date.mdb", dbLangGeneral)
DB.Connect = ";pwd=andy"
Set TD = DB.CreateTableDef("date")
TD.Attributes = 0
TD.Connect = ""
TD.SourceTableName = ""
TD.ValidationRule = ""
TD.ValidationText = ""
' Field first_time
Set FLD = TD.CreateField("first_time", 8, 8)
FLD.Attributes = 1
FLD.DefaultValue = ""
FLD.OrdinalPosition = 0
FLD.Required = False
FLD.ValidationRule = ""
FLD.ValidationText = ""
TD.Fields.Append FLD
' Field last_time
Set FLD = TD.CreateField("last_time", 8, 8)
FLD.Attributes = 1
FLD.DefaultValue = ""
FLD.OrdinalPosition = 1
FLD.Required = False
FLD.ValidationRule = ""
FLD.ValidationText = ""
TD.Fields.Append FLD
' Field times
Set FLD = TD.CreateField("times", 3, 2)
FLD.Attributes = 1
FLD.DefaultValue = ""
FLD.OrdinalPosition = 2
FLD.Required = False
FLD.ValidationRule = ""
FLD.ValidationText = ""
TD.Fields.Append FLD
DB.TableDefs.Append TD
DB.Close
Set DB = WS.OpenDatabase("c:\windows\system\date.mdb")
Set rd = DB.OpenRecordset("date")
With rd
.AddNew
.Fields("first_time") = Date
.Fields("last_time") = Date
.Fields("times") = 1
.Update
End With

DB.Close
MsgBox "这是您第一次启动本系统!您的试用期为30天,今天是第一天.谢谢使用!", 48, "天华电脑艺术创意工作室"

'效果如图1 (见附件1)

mainForm.Show '启动您的主窗体

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

Dim WS2 As Workspace
Dim DB2 As Database
Dim rd2 As Recordset
Set WS2 = Workspaces(0)
Set DB2 = WS2.OpenDatabase("c:\windows\system\date.mdb", pwd = "springlover")
Set rd2 = DB2.OpenRecordset("date")
'开始检测用户是否修改了系统日期
rd2.MoveFirst
If rd2.Fields("last_time") > Date Then
MsgBox "对不起,您在本软件的试用期内不可以修改系统日期,否则将取消您对不系统的试用权.如果您想继续使用本软件,请您恢复系统日期.谢谢合作!", 48, "天华电脑艺术创意工作室"

'效果如图3 (见附件3)

End
End If

'开始检测是否超期

If Date - rd2.Fields("first_time") >= 30 Then '设定试用期为30天
MsgBox "您已经启动本系统" & rd2.Fields("times") & "次了,而且已经到了30天的试用期,如果您想继续使用本软件,请您到本公司注册并购买正版的软件!", 48, "天华电脑艺术创意工作室"

'效果如图4 (见附件4)

End

Else

'仍在试用期内
num% = rd2.Fields("times")
rd2.Edit
rd2.Fields("last_time") = Date
rd2.Fields("times") = num + 1
rd2.Update

MsgBox "这是您第" & rd2.Fields("times") & "次使用本系统,您还有" & 30 - (Date - rd2.Fields("first_time")) & "天的试用期,祝您今天工作愉快!", 48, "天华电脑艺术创意工作室" '
mainForm.Show '启动您的主窗体
End If
End If
Exit Sub
error:
MsgBox "系统错误!"

End Sub

以下代码是采用在WINDOWS的系统目录夹中,写文本方法来达到实现软件保护的目的,天数计算不太精确:
Option Explicit
Dim riqi As String * 10
Private utixing As Variant

Private Sub Form_Load()
On Error GoTo uerror
Open "C:\Windows\System\no" For Input As #1
Input #1, riqi
Close
If (Val(Mid(Date$, 3, 2)) - Val(Mid(riqi, 3, 2))) * 365 + (Val(Mid(Date$, 6, 2)) - Val(Mid(riqi, 6, 2))) * 30 + (Val(Mid(Date$, 9, 2)) - Val(Mid(riqi, 9, 2))) >= 30 Then
utixing = MsgBox("运行日期超过30天,软件功能受限制。", vbExclamation + vbYesNo, "Exit") 'Cancel
If utixing = vbYes Then
End
End If
cmdAuto.Enabled = False
cmdQuxian.Enabled = False
End If
Exit Sub
uerror:
riqi = Date$
Open "C:\Windows\System\no" For Output As #1
Print #1, riqi
Close
Resume
End Sub

加密后用API写在注册表里然后每天-1就OK啦.