程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 用C++ Builder設定程序使用時間

用C++ Builder設定程序使用時間

編輯:關於C++

目前,許多應用程序都有在一定限制條件內免費使用的功能,利用該功能可以 有效限制非法用戶的使用,同時,還可以使合法用戶在充分了解軟件優缺點的基 礎上,再決定是否購買。本文稱實現這種功能的方法為保護方法。保護方法的利 用在保護正版軟件的基礎上,既有效地擴大了軟件的使用范圍,又給用戶提供了 進行充分選擇的機會。

保護方法

本文介紹4種利用C++ Builder 實現的保護方法:

利用注冊表限制程序使用的天數,比如限制使用30天;

利用注冊表限制程序使用的次數,比如限制使用45次;

設定程序 使用的截止日期,比如設截止日期為2001年8月31日;

限制每次使用程序 的時間,比如一次允許使用50分鐘。

這些保護方式既可以單獨使用,也可 以幾個同時使用實現綜合保護。

編程思路

1.方法1和方法2

在程序主窗體的OnCreate事件過程中,定義注冊表TRegistry類對象指針 Reg:

TRegistry *Reg = new TRegistry;

通過其屬性RootKey定位 注冊表根鍵,如:

Reg->RootKey = HKEY_USERS;

//可根據需 要選擇

利用OpenKey方法打開根鍵下的一個自定義主鍵,例如:

Reg->OpenKey(“.DEFAULT\\Myprogram\\Records”, false)

若該主鍵不存在(即首次運行本程序時),需要利用CreateKey() 方法創建該主鍵,並將其打開,寫入子鍵及鍵值如下(參見圖1):

//“Count”鍵值記錄本程序運行次數

Reg- >WriteInteger(“Count”,1);

//“Flag”鍵值 記載本程序使用是否有過期的記錄

Reg->WriteInteger (“Flag”,0);

//“First”鍵值記錄首次運行本程 序的日期

Reg->WriteDate(“First”,Date ());

//“Last”鍵值記錄上一次運行本程序的日期

Reg ->WriteDate(“Last”,Date());

圖 1

通過對 “First”鍵值的讀取獲得首次運行程序時的日期,再與系統當前的日 期進行比較,判斷是否超過指定的天數而決定是否終止程序的運行,從而實現使 用天數的限制。通過對“Count”鍵值的讀取獲得程序使用的次數,判 斷是否超過指定的次數而決定是否終止程序的運行,以實現使用次數的限制。

此外,通過讀取“Flag”鍵值可以了解程序是否有過期記錄, 其值為1表示程序使用已經過期;讀取“Last”鍵值可以取得上一次使 用本程序的日期。

如果經過判斷沒有超過規定的使用期限,則更新 “Count”和“Last”的鍵值:

//使用次數加 1

Reg->WriteInteger(“Count”, Reg- >ReadInteger(“Count”)+1);

//重新寫入當前日期

Reg->WriteDate(“Last”, Date());

2.方法 3

直接在主窗體的OnCreate事件過程中判斷當前日期是否超過預定的截止 日期,決定是否終止程序運行。

3.方法4

利用一個時間組件,在它 的OnTimer事件過程中隨時檢測本次程序運行的時間(從程序啟動到當前)是否超 過預設的時間,從而決定是否終止程序的運行。

具體實現

1. 限制 使用天數(如30天)

在主窗體的OnCreate事件過程中加入代碼判斷程序的 使用是否超過30天,若是,則終止程序運行並記錄“Flag”鍵值為1。 當前系統日期由VCL庫函數Date()獲取。主要代碼如下:

//定義日期型對 象

TDate firstDate, currentDate;

//獲取首次運行程序日期

firstDate=Reg->ReadDate(“First”);

//獲取首 次運行程序日期

currentDate=Date();
if(currentDate.Val-firstDate.Val >30)
{
Application->MessageBox(“本程序使用已經超過30天!\n將要關閉程 序...”,“結果”,MB_OK);
Reg->WriteInteger(“Flag”,1);
//終止程序運行
Application->Terminate();
}

2. 限制使用次數(如45次)

在主窗體的OnCreate事件過 程中加入代碼判斷程序的使用是否超過45次,若是,則終止程序運行並記錄 “Flag”鍵值為1。主要代碼如下:

if(Reg- >ReadInteger(“Count”) > 45)
{
Application->MessageBox(“本程序使用已經超過了45次!\n程序即將 關閉...”,“結果”,MB_OK);

Reg- >WriteInteger(“Flag”,1);
Application->Terminate();
}

3. 設置使用截止日期(如截止日期為2001年8月31日)

該方法不需要修改注冊表,在主窗體的OnCreate事件過程中加入如下代碼即可:

//定義日期型變量(對象)

TDate endDate, currentDate;
//設置日期分隔符
DateSeparator = ‘-';
//設置日期表達格式
ShortDateFormat = “yyyy/mm/dd”;
currentDate=Date();
//日期轉換
endDate=StrToDate(“2001-08-31”);
if(currentDate.Val >endDate.Val)
{
Application->MessageBox(“已經超過期限,本程序已不能使用!\n將 要關閉程序...”,“結果”,MB_OK);
file://Reg->WriteInteger(“Flag”,1);
Application->Terminate();
}

4. 限制每次使用的時間(如限用50分鐘)

該方法不需要 修改注冊表,在一個TTimer組件的OnTimer事件過程中,隨時檢測系統當前時間與 程序的啟動時間之間是否超過50分鐘即可。其中程序的啟動時間可以在主窗體的 OnCreate事件過程中取得,這需要定義日期時間型全局變量startDateTime和 currentDateTime:

TDateTime startDateTime, currentDateTime;

為獲得程序的啟動時間,在主窗體的OnCreate事件過程 中加入如下代碼:

startDateTime = Now();

在時間組件的OnTimer 事件過程中加入以下代碼:

currentDateTime=Now();
if(currentDateTime.Val - startDateTime.Val > 50.0/(60*24))
{
//計時器停止計時,等待消息框關閉
Timer1->Enabled = false;
Application->MessageBox(“本次程序已經運行了50分鐘!\n將要關閉 程序...”,“結果”,MB_OK);
//關閉程序
Close();
}

幾點說明

1.可以將注冊表根鍵定位為其他的鍵(參見圖 1),其主鍵的定義應具有“個性化”,也可以利用已有的主鍵,層次 可以多些,這樣隱蔽性更好,能最大限度地保護應用程序。

2.為了防止 倒撥系統時鐘至上一次使用程序的日期之前,通過讀取“Last”鍵值 可以對此進行檢測和處理,代碼如下:

TDate lastDate, currentDate;
//獲得上一次運行本程序的日期
lastDate = Reg->ReadDate(“Last”);
currentDate = Date();
if(currentDate.Val< lastDate.Val)
{
Application->MessageBox(“系統時鐘的日期已被回撥!\n本程序即將 關閉...”,“結果”,MB_OK);
Reg->WriteInteger(“Flag”,1);
//終止程序的運行
Application->Terminate();
}
3.一旦“Flag”鍵值為1,說明程序已經過期,可用以下代碼限制再 次運行程序:
if(Reg->ReadInteger(“Flag”)==1)
{
Application->MessageBox(“本程序使用已經過期!\n將要關閉程 序...”,“結果”,MB_OK);
Application->Terminate();
}

4.限制程序的使用天數或次數是通過訪問注冊表實現的,對實 施該項保護的程序即使重新安裝也不能消除限制,除非刪除注冊表中相應的鍵值 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved