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