用C++ Builder為計(jì)算機(jī)增加打開日志
發(fā)表時(shí)間:2024-02-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]公用機(jī)房或辦公室中的計(jì)算機(jī)通常是大家共享使用的,作為管理者或“主要”使用者很想掌握機(jī)器何時(shí)被開啟使用過(guò),若有一個(gè)啟動(dòng)記錄就可以隨時(shí)了解這些情況。本文給出如何用C++ Builder 5實(shí)現(xiàn)這樣一個(gè)程序的編制,使每次啟動(dòng)計(jì)算機(jī)即執(zhí)行本程序,在注冊(cè)表中記錄開機(jī)時(shí)間等信息,以便隨時(shí)通過(guò)注冊(cè)表編輯器查看。...
公用機(jī)房或辦公室中的計(jì)算機(jī)通常是大家共享使用的,作為管理者或“主要”使用者很想掌握機(jī)器何時(shí)被開啟使用過(guò),若有一個(gè)啟動(dòng)記錄就可以隨時(shí)了解這些情況。本文給出如何用C++ Builder 5實(shí)現(xiàn)這樣一個(gè)程序的編制,使每次啟動(dòng)計(jì)算機(jī)即執(zhí)行本程序,在注冊(cè)表中記錄開機(jī)時(shí)間等信息,以便隨時(shí)通過(guò)注冊(cè)表編輯器查看。程序特點(diǎn):每次啟動(dòng)計(jì)算機(jī)都要執(zhí)行一次(這一功能由本程序自動(dòng)完成而不必手工在注冊(cè)表中添加,只需運(yùn)行一次程序即可),為增加隱蔽性,該程序?yàn)楹笈_(tái)運(yùn)行的無(wú)窗體程序。
編程要點(diǎn):
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);
兩條語(yǔ)句刪除,目的是創(chuàng)建無(wú)窗體程序。
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)建注冊(cè)表堆對(duì)象指針
Registry->RootKey = HKEY_USERS; //定位注冊(cè)表根鍵
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); //在注冊(cè)表中注冊(cè)本程序
Reg->CloseKey();
delete Reg;
Application->MessageBox("登錄程序注冊(cè)成功!","結(jié)果",MB_OK); // ②
Registry->WriteInteger("開機(jī)次數(shù)",num);
Registry->WriteString("程序注冊(cè)時(shí)間",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ī)時(shí)間
}
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)用程序中,通過(guò)讀寫注冊(cè)表對(duì)程序的使用加以限制,比如限制使用程序次數(shù):30次,只要在上述代碼③處增加一條if語(yǔ)句
if(num==30)
{
Application->MessageBox(“本程序已經(jīng)使用30次,將要退出!!”, “警告:”, MB_OK);
return 0;
}
即可(刪除①到②行的語(yǔ)句段),編寫限制版的應(yīng)用程序。當(dāng)然也可以考慮對(duì)時(shí)間的限制,這只要在注冊(cè)表中暗設(shè)“機(jī)關(guān)”就行。
為了生成單獨(dú)的EXE文件,應(yīng)激活Project/Options…菜單項(xiàng),去掉標(biāo)簽“Linker”下的“Use dynamic RTL”選項(xiàng),同時(shí)去掉“Packages”標(biāo)簽下的“Build with runtime packages”選項(xiàng)。將此文件Logon.exe復(fù)制到需要記錄的機(jī)器上的一個(gè)固定的文件夾中(比如,windows文件夾),執(zhí)行一次即可完成程序的注冊(cè)。