二級C++輔導(dǎo):用C++Builder設(shè)定程序使用時間

字號:

保護(hù)方法
    本文介紹4種利用C++ Builder實現(xiàn)的保護(hù)方法:
    利用注冊表限制程序使用的天數(shù),比如限制使用30天;
    利用注冊表限制程序使用的次數(shù),比如限制使用45次;
    設(shè)定程序使用的截止日期,比如設(shè)截止日期為2001年8月31日;
    限制每次使用程序的時間,比如一次允許使用50分鐘。
    這些保護(hù)方式既可以單獨使用,也可以幾個同時使用實現(xiàn)綜合保護(hù)。
    編程思路
    1.方法1和方法2
    在程序主窗體的OnCreate事件過程中,定義注冊表TRegistry類對象指針Reg:
    TRegistry *Reg = new TRegistry;
    通過其屬性RootKey定位注冊表根鍵,如:
    Reg->RootKey = HKEY_USERS;
    //可根據(jù)需要選擇
    利用OpenKey方法打開根鍵下的一個自定義主鍵,例如:
    Reg->OpenKey(“.DEFAULT\\Myprogram\\Records”, false)
    若該主鍵不存在(即首次運行本程序時),需要利用CreateKey()方法創(chuàng)建該主鍵,并將其打開,寫入子鍵及鍵值如下:
    //“Count”鍵值記錄本程序運行次數(shù)
    Reg->WriteInteger(“Count”,1);
    //“Flag”鍵值記載本程序使用是否有過期的記錄
    Reg->WriteInteger(“Flag”,0);
    //“First”鍵值記錄首次運行本程序的日期
    Reg->WriteDate(“First”,Date());
    //“Last”鍵值記錄上一次運行本程序的日期
    Reg->WriteDate(“Last”,Date());
    通過對“First”鍵值的讀取獲得首次運行程序時的日期,再與系統(tǒng)當(dāng)前的日期進(jìn)行比較,判斷是否超過指定的天數(shù)而決定是否終止程序的運行,從而實現(xiàn)使用天數(shù)的限制。通過對“Count”鍵值的讀取獲得程序使用的次數(shù),判斷是否超過指定的次數(shù)而決定是否終止程序的運行,以實現(xiàn)使用次數(shù)的限制。
    此外,通過讀取“Flag”鍵值可以了解程序是否有過期記錄,其值為1表示程序使用已經(jīng)過期;讀取“Last”鍵值可以取得上一次使用本程序的日期。
    如果經(jīng)過判斷沒有超過規(guī)定的使用期限,則更新“Count”和“Last”的鍵值:
    //使用次數(shù)加1
    Reg->WriteInteger(“Count”, Reg->ReadInteger(“Count”)+1);
    //重新寫入當(dāng)前日期
    Reg->WriteDate(“Last”, Date());
    2.方法3
    直接在主窗體的OnCreate事件過程中判斷當(dāng)前日期是否超過預(yù)定的截止日期,決定是否終止程序運行。
    3.方法4
    利用一個時間組件,在它的OnTimer事件過程中隨時檢測本次程序運行的時間(從程序啟動到當(dāng)前)是否超過預(yù)設(shè)的時間,從而決定是否終止程序的運行。
    具體實現(xiàn)
    1. 限制使用天數(shù)(如30天)
    在主窗體的OnCreate事件過程中加入代碼判斷程序的使用是否超過30天,若是,則終止程序運行并記錄“Flag”鍵值為1。當(dāng)前系統(tǒng)日期由VCL庫函數(shù)Date()獲取。主要代碼如下:
    //定義日期型對象
    TDate firstDate, currentDate;
    //獲取首次運行程序日期
    firstDate=Reg->ReadDate(“First”);
    //獲取首次運行程序日期
    currentDate=Date();
    if(currentDate.Val-firstDate.Val >30)
    {
    Application->MessageBox(“本程序使用已經(jīng)超過30天!\n將要關(guān)閉程序...”,“結(jié)果”,MB_OK);
    Reg->WriteInteger(“Flag”,1);
    //終止程序運行
    Application->Terminate();
    }
    2. 限制使用次數(shù)(如45次)
    在主窗體的OnCreate事件過程中加入代碼判斷程序的使用是否超過45次,若是,則終止程序運行并記錄“Flag”鍵值為1。主要代碼如下:
    if(Reg->ReadInteger(“Count”) > 45)
    {
    Application->MessageBox(“本程序使用已經(jīng)超過了45次!\n程序即將關(guān)閉...”,“結(jié)果”,MB_OK);
    Reg->WriteInteger(“Flag”,1);
    Application->Terminate();
    }