程序特點(diǎn)
每次啟動(dòng)計(jì)算機(jī)都要執(zhí)行一次(這一功能由本程序自動(dòng)完成而不必手工在注冊表中添加,只需運(yùn)行一次程序即可),為增加隱蔽性,該程序?yàn)楹笈_(tái)運(yùn)行的無窗體程序。
編程要點(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);
兩條語句刪除,目的是創(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("程序注冊時(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)用程序中,通過讀寫注冊表對程序的使用加以限制,比如限制使用程序次數(shù):30次,只要在上述代碼③處增加一條if語句
if(num==30)
{
Application->MessageBox(“本程序已經(jīng)使用30次,將要退出!!”, “警告:”, MB_OK);
return 0;
}
即可(刪除①到②行的語句段),編寫限制版的應(yīng)用程序。當(dāng)然也可以考慮對時(shí)間的限制,這只要在注冊表中暗設(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í)行一次即可完成程序的注冊。


