公用機房或辦公室中的電腦通常是大家共用使用的,作為管理者或“主要”使用者很想掌握機器何時被開啟使用過,若有一個開機記錄就可以隨時瞭解這些情況。本文給出如何用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;
}