http://community.csdn.net/Expert/topic/3457/3457757.xml?temp=.915951设法保存两个时间值: 1 第一次运行的时间。这很容易做到,因为此时还没有记录。 2 上一次运行的时间,每次启动(防止异常退出)和退出时都更新就可以了。你在程序中每次启动时检查: 1 距离第一次运行是否超过了期限。 2 当前时间是否小于等于上一次运行时间(检查用户是否作弊)。 只要两项检查有任何一项是 True,就弹出对话框后结束程序。你可以用任何加密手段。最好是让用户找不到你保存记录的地方,例如像 CIH 那样保存在 DLL 文件的空隙中,或者彩色图片文件的各像素最后 1 bit 中。而这些文件又是不会被删除的。例如你的程序所要求的文件。
其实防止作弊的最可靠方案是C/S结构。用户每次启动程序时必须上网登录。你在 InterNet 上的服务程序给予它继续使用的授权。所有的用户数据都在服务器上。
这里是一个完整的30天,或30次的源代码: Private Sub Form_Load() Dim vTimes As Long Dim vDays As Long Dim vStr As String Dim vStrDays As String vTimes = GetSetting("CTYKT_TEST", "Times", "Times", 30) vStr = Left(Date, 4) & Mid(Date, 6, 2) & Right(Date, 2) vDays = GetSetting("CTYKT_TEST", "Days", "Days", vStr) vStrDays = Left(vDays, 4) & "-" & Mid(vDays, 5, 2) & "-" & Right(vDays, 2) If vTimes <= 0 Or DateDiff("d", vStrDays, Date) > 30 Then PUBTEST = True MsgBox "未知错误" Unload Me Exit Sub Else vTimes = vTimes - 1 SaveSetting "CTYKT_TEST", "Times", "Times", vTimes SaveSetting "CTYKT_TEST", "Days", "Days", vDays End If End Sub
1 第一次运行的时间。这很容易做到,因为此时还没有记录。
2 上一次运行的时间,每次启动(防止异常退出)和退出时都更新就可以了。你在程序中每次启动时检查:
1 距离第一次运行是否超过了期限。
2 当前时间是否小于等于上一次运行时间(检查用户是否作弊)。
只要两项检查有任何一项是 True,就弹出对话框后结束程序。你可以用任何加密手段。最好是让用户找不到你保存记录的地方,例如像 CIH 那样保存在 DLL 文件的空隙中,或者彩色图片文件的各像素最后 1 bit 中。而这些文件又是不会被删除的。例如你的程序所要求的文件。
Private Sub Form_Load()
Dim vTimes As Long
Dim vDays As Long
Dim vStr As String
Dim vStrDays As String
vTimes = GetSetting("CTYKT_TEST", "Times", "Times", 30)
vStr = Left(Date, 4) & Mid(Date, 6, 2) & Right(Date, 2)
vDays = GetSetting("CTYKT_TEST", "Days", "Days", vStr)
vStrDays = Left(vDays, 4) & "-" & Mid(vDays, 5, 2) & "-" & Right(vDays, 2)
If vTimes <= 0 Or DateDiff("d", vStrDays, Date) > 30 Then
PUBTEST = True
MsgBox "未知错误"
Unload Me
Exit Sub
Else
vTimes = vTimes - 1
SaveSetting "CTYKT_TEST", "Times", "Times", vTimes
SaveSetting "CTYKT_TEST", "Days", "Days", vDays
End If
End Sub