用C++Builder為計算機(jī)增加啟動日志

字號:

公用機(jī)房或辦公室中的計算機(jī)通常是大家共享使用的,作為管理者或“主要”使用者很想掌握機(jī)器何時被開啟使用過,若有一個啟動記錄就可以隨時了解這些情況。本文給出如何用C++ Builder 5實現(xiàn)這樣一個程序的編制,使每次啟動計算機(jī)即執(zhí)行本程序,在注冊表中記錄開機(jī)時間等信息,以便隨時通過注冊表編輯器查看。程序特點:每次啟動計算機(jī)都要執(zhí)行一次(這一功能由本程序自動完成而不必手工在注冊表中添加,只需運行一次程序即可),為增加隱蔽性,該程序為后臺運行的無窗體程序。
    編程要點:
    1. 在C++ Builder 5環(huán)境中建立新工程文件:執(zhí)行菜單命令File/New Application,然后將工程文件另存為“Logon.bpr”。
    2. 執(zhí)行菜單命令Project/View Source,打開Logon.cpp文件,將其中的
    USEFORM(“Unit1.cpp”, Form1);
    和
    Application->CreateForm(__classid(Tform1), &Form1);
    兩條語句刪除,目的是創(chuàng)建無窗體程序。
    3. 文件Logon.cpp的全部代碼如下:
    #include
     #include //添加行
     #pragma hdrstop
     USERES("logon.res");
     WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
     {
     try
     { //添加部分開始
     int num=0;
     TRegistry *Registry = new TRegistry; //創(chuàng)建注冊表堆對象指針
     Registry->RootKey = HKEY_USERS; //定位注冊表根鍵
     if(!Registry->OpenKey(".DEFAULT\\Logon\\Records", false))
     { //如果打開主鍵失敗
     Registry->CreateKey(".DEFAULT\\Logon\\Records"); //創(chuàng)建主鍵
     if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records", false)))
     return 0;
     else
     {
     TRegistry *Reg = new TRegistry; // ①
     Reg->RootKey = HKEY_LOCAL_MACHINE;
     Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
     Reg->WriteString("Logon",Application->ExeName); //在注冊表中注冊本程序
     Reg->CloseKey();
     delete Reg;
     Application->MessageBox("登錄程序注冊成功!","結(jié)果",MB_OK); // ②
     Registry->WriteInteger("開機(jī)次數(shù)",num);
     Registry->WriteString("程序注冊時間",Date()+Time());
     return 0;
     }
     }
     else
     {
     num = Registry->ReadInteger("開機(jī)次數(shù)"); // ③
     Registry->WriteInteger("開機(jī)次數(shù)",num+1); //記錄開機(jī)次數(shù)
     Registry->WriteString("第"+AnsiString(num+1)+"次開機(jī)",Date()+Time()); //記錄開機(jī)時間
     }
     Registry->CloseKey();
     delete Registry;
     //添加部分結(jié)束
     Application->Initialize();
     Application->Run();
     }
     catch (Exception &exception)
     {
     Application->ShowException(&exception);
     }
     return 0;
     }
    應(yīng)用:
    利用此法,將上述相關(guān)代碼移植到其它C++ Builder應(yīng)用程序中,通過讀寫注冊表對程序的使用加以限制,比如限制使用程序次數(shù):30次,只要在上述代碼③處增加一條if語句
    if(num==30)
     {
     Application->MessageBox(“本程序已經(jīng)使用30次,將要退出??!”, “警告:”, MB_OK);
     return 0;
     }
    即可(刪除①到②行的語句段),編寫限制版的應(yīng)用程序。當(dāng)然也可以考慮對時間的限制,這只要在注冊表中暗設(shè)“機(jī)關(guān)”就行。
    為了生成單獨的EXE文件,應(yīng)激活Project/Options…菜單項,去掉標(biāo)簽“Linker”下的“Use dynamic RTL”選項,同時去掉“Packages”標(biāo)簽下的“Build with runtime packages”選項。將此文件Logon.exe復(fù)制到需要記錄的機(jī)器上的一個固定的文件夾中(比如,windows文件夾),執(zhí)行一次即可完成程序的注冊。