用VB“破解”有時間限制的程式 (轉)

worldblog發表於2007-12-04
用VB“破解”有時間限制的程式 (轉)[@more@]

用VB“”有時間限制的


張 勝

你是否經常遇到有時間限制的程式?我等懶人尤其對此特別反感,可惜囊中羞澀,只好反覆修改其日期而使自己多用幾次此——實在是辛苦!於是使用“Anyday32”,可惜也太麻煩了;再後使用“時光倒流”,也不好用,而且——居然還有s!......看樣子只好自己動手做“VB軟體DIY”了。 一、問題所在 有時間限制的程式大都是依靠在啟動過程中檢測系統日期,再與其記錄的第一次使用日期(放於登錄檔或特殊中)進行對比檢測是否試用期已到,若試用期已到,可能會在登錄檔中作一定的標記,使下次程式不可用。 二、解決問題 我們一般可以透過修改系統時間來使用此類程式,當然在其作過過期標誌後可能此“大法”就無效了;也有一些程式的檢測細化到了小時,那我們只能將時間也一塊改了。 三、DIY中的思路及注意事項 我們可以在自己的程式中先修改系統日期,再啟動相應的有時間限制的程式,過一段時間後再將系統日期改回來。 注意:在等待外部程式檢測系統日期的等待過程中,系統日期已經改變,那麼我們改回的系統日期將是錯誤的!因此我們要進行一定的檢測,以防止此類錯誤的發生。 四、開始軟體DIY 這裡我們為方便控制,使用Access進行軟體編制。 資料庫中表的設計:

欄位名: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=資料庫路徑及名稱

Record=資料表名稱

CommonDialog1

CommonDialog

Filter="請選擇您想要啟動的程式 (*.*)"

Grid1

DBGrid

AllowaddNew=True;AllowDelete=True;DataSource=Data1

CommonDialog和DBGrid控制元件需要另外載入,其中還需在DBGrid的屬性頁中進行一定的資料庫掛接和設定,要在其屬性頁中“佈局”中的第二列的“按鈕”選中。 以下是本小軟體的: Option Explicit '啟動外部應用程式的定義 Private Declare Function Execute 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 = " * From [StartProgram] Where [程式名稱]='" & Trim(Command) & "'" Data1.Refresh If Not (Data1.Recordset.EOF And Data1.Recordset.BOF) Then Me.H '隱藏本系統 Check1.Value = 1 '設定關閉標誌 Command1_Click '啟用本系統的執行事件 Else '未找到處理 MsgBox "沒有此啟動程式!", 16, Me.Caption '錯誤提示 End '關閉 End If End If End Sub 五、小 結 本小軟體可啟動多個有時間限制的程式,也可以透過命令引數(格式是:本程式名 要啟動的程式名稱)一次啟動一個程式,可用於作相應的快捷方式(和Anyday32類似),讓你放心去使用。 程式編完了,但還需你的完善和潤色,遇到問題自己解決——我是軟體DIY人!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章