用VB“破解”有時間限制的程序

用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.Hide '隱藏本系統
Check1.Value = 1 '設置關閉標誌
Command1_Click '激活本系統的執行事件
Else
'未找到處理
MsgBox "沒有此啓動程序!", 16, Me.Caption '錯誤提示
End '關閉
End If
End If
End Sub
五、小 結
本小軟件可啓動多個有時間限制的程序,也可以通過命令參數(格式是:本程序名 要啓動的程序名稱)一次啓動一個程序,可用於作相應的快捷方式(和Anyday32類似),讓你放心去使用。
程序編完了,但還需你的完善和潤色,遇到問題自己解決——我是軟件DIY人!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章