用VB“破解”有时间限制的程序 (转)[@more@]
张 胜
你是否经常遇到有时间限制的程序?我等懒人尤其对此特别反感,可惜囊中羞涩,只好反复修改其 系统日期而使自己多用几次此 软件——实在是辛苦!于是使用“Anyday32”,可惜也太麻烦了;再后使用“时光倒流”,也不好用,而且——居然还有 bugs!......看样子只好自己动手做“VB软件DIY”了。 一、问题所在 有时间限制的程序大都是依靠在启动过程中检测系统日期,再与其记录的第一次使用日期(放于注册表或特殊 文件中)进行对比检测是否试用期已到,若试用期已到,可能会在注册表中作一定的标记,使下次程序不可用。 二、解决问题 我们一般可以通过修改系统时间来使用此类程序,当然在其作过过期标志后可能此“大法”就无效了;也有一些程序的检测细化到了小时,那我们只能将时间也一块改了。 三、DIY中的思路及注意事项 我们可以在自己的程序中先修改系统日期,再启动相应的有时间限制的程序,过一段时间后再将系统日期改回来。 注意:在等待外部程序检测系统日期的等待过程中,系统日期已经改变,那么我们改回的系统日期将是错误的!因此我们要进行一定的检测,以防止此类错误的发生。 四、开始软件DIY 这里我们为方便控制,使用Access 数据库进行软件编制。 数据库中表的设计:
用VB“破解”有时间限制的程序
张 胜
你是否经常遇到有时间限制的程序?我等懒人尤其对此特别反感,可惜囊中羞涩,只好反复修改其 系统日期而使自己多用几次此 软件——实在是辛苦!于是使用“Anyday32”,可惜也太麻烦了;再后使用“时光倒流”,也不好用,而且——居然还有 bugs!......看样子只好自己动手做“VB软件DIY”了。 一、问题所在 有时间限制的程序大都是依靠在启动过程中检测系统日期,再与其记录的第一次使用日期(放于注册表或特殊 文件中)进行对比检测是否试用期已到,若试用期已到,可能会在注册表中作一定的标记,使下次程序不可用。 二、解决问题 我们一般可以通过修改系统时间来使用此类程序,当然在其作过过期标志后可能此“大法”就无效了;也有一些程序的检测细化到了小时,那我们只能将时间也一块改了。 三、DIY中的思路及注意事项 我们可以在自己的程序中先修改系统日期,再启动相应的有时间限制的程序,过一段时间后再将系统日期改回来。 注意:在等待外部程序检测系统日期的等待过程中,系统日期已经改变,那么我们改回的系统日期将是错误的!因此我们要进行一定的检测,以防止此类错误的发生。 四、开始软件DIY 这里我们为方便控制,使用Access 数据库进行软件编制。 数据库中表的设计:
字段名XML:NAMESPACE PREFIX = O />
类型
长度
备注
程序名称
Text
20
程序的标识,以便于管理
启动程序
Text
255
实际启动的程序
启动日期
Date/Time
8
应改回的系统日期
窗体及 控件设计:名称
类型
设置
Form1
窗体
BorderStyle=1
Command1
command
Caption="执行(&R)"
Command2
command
Caption="退出(&Q)"
Check1
CheckBox
Caption="启动程序后自动关闭本软件"
Timer1
Timer
Enabled=False;Interval=5000
Data1
Data
DatabaseName=数据库路径及名称
Recordsource=数据表名称
CommonDialog1
CommonDialog
Filter="请选择您想要启动的程序 (*.*)"
dbGrid1
DBGrid
AllowaddNew=True;AllowDelete=True;DataSource=Data1
CommonDialog和DBGrid控件需要另外加载,其中还需在DBGrid的属性页中进行一定的数据库挂接和设置,要在其属性页中“布局”中的第二列的“按钮”选中。 以下是本小软件的 源代码: Option Explicit '启动外部应用程序的 api 函数定义 Private Declare Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Dim OldDate As Date '保存系统日期 Private Sub Command1_Click() If Not Data1.Recordset.EOF Then '若数据库正在添加记录则不动作 Date = Data1.Recordset(2) '改系统时间 Call ShellExecute(0, vbNullString, Data1.Recordset(1), vbNullString, vbNullString, vbOK) '启动外部程序 Me.Enabled = False '屏蔽其他操作 Timer1.Enabled = True '启动延时记时器 End If End Sub Private Sub Command2_Click() End '关闭本系统 End Sub Private Sub DBGrid1_BeforeUpdate(Cancel As Integer) If MsgBox("记录改变吗?", vbYesNo + vbQuestion) <> vbYes Then Cancel = True '是否 更新数据库控制 End Sub Private Sub DBGrid1_ButtonClick(ByVal ColIndex As Integer) On Error GoTo errdeal '打开错误监测 CommonDialog1.CancelError = True '系统对话框错误控制 CommonDialog1.ShowOpen '打开系统对话框 If CommonDialog1.filename <> "" Then DBGrid1.Text = CommonDialog1.filename '写入要启动的程序信息 errdeal: End Sub Private Sub Form_Load() OldDate = Date '保存系统时间 Call Parameter '获取系统启动时的参数 End Sub Private Sub Timer1_Timer()’五秒钟后恢复 If Format(Time, "HH:MM:SS") < "00:00:05" Then OldDate = OldDate + 1 '防止在接近零时时的日期恢复错误 Date = OldDate '恢复系统时间 Me.Enabled = True '恢复正常操作 Timer1.Enabled = False '屏蔽延时记时器 If Check1.Value = 1 Then End '是否关闭本系统 End Sub Private Sub Parameter() '系统参数处理 If Command <> "" Then '查找相应的启动程序 Data1.RecordSource = " select * From [StartProgram] Where [程序名称]='" & Trim(Command) & "'" Data1.Refresh If Not (Data1.Recordset.EOF And Data1.Recordset.BOF) Then Me.H ide '隐藏本系统 Check1.Value = 1 '设置关闭标志 Command1_Click '激活本系统的执行事件 Else '未找到处理 MsgBox "没有此启动程序!", 16, Me.Caption '错误提示 End '关闭 End If End If End Sub 五、 小 结 本小软件可启动多个有时间限制的程序,也可以通过命令参数(格式是:本程序名 要启动的程序名称)一次启动一个程序,可用于作相应的快捷方式(和Anyday32类似),让你放心去使用。 程序编完了,但还需你的完善和润色,遇到问题自己解决——我是软件DIY人!来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10790663/viewspace-954590/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10790663/viewspace-954590/