ÄãµÄλÖãºÈí¼þÓë¹âÅÌ>
C++BuilderÖÐ×¢²á±íµÄ²Ù×÷
2000-03-21 00:00:00¡¤ ±§Ñ©¡¤cpcw

Ù×÷¾Í·Ç³£µÄ¼òµ¥ÁË£¬ÏÂÃæÎÒ¾ÍÒÔÒ»¸öʵÀýÀ´ËµÃ÷TRegistryÀàµÄÓ÷¨¡£

Ê×ÏÈ£¬ÏȽéÉÜÒ»ÏÂTRegistryµÄÊôÐԺͷ½·¨£º

TRegistryÀàÒ»¹²ÓÐËĸöÊôÐÔ¡£

ÊôÐÔ ÀàÐÍ ÃèÊö
CurrentKey int °üº¬µ±Ç°¼üÖµµÄÖµ£¬µ«ËüµÄÒâ˼²»Ì«ºÃ¶®£¬ËùÒÔ²»Ì«³£ÓÃ
RootKey int µ±Ç°¼üÖµµÄ¸ù¼ü£¬BCB¶¨ÒåÓÐö¾Ù³£Á¿£ºHKEY_CURRENT_USER¡¢HKEY_CLASSES_ROOT¡¢HKEY_LOCAL_MACHINE¡¢HKEY_USERS¡¢HKEY_CURRENT_CONFIG¡¢HKEY_DYN_DATA¡¢HKEY_USERS¡£·Ö±ð¶ÔӦע²á±íÖÐÏàÓ¦µÄÖ÷¼ü¡£Éú³ÉÒ»¸öTRegistryÀàµÄʵÀýʱRootKyeȱʡֵΪHKEY_CURRENT_USER
CurrentPath AnsiString µ±Ç°¼üÖµµÄÎı¾ÃèÊö£¬\HKEY_CURRENT_USER\Software\BorlandµÄCurrentPath="Software\Borland"£¬¶øRootKey=HKEY_CURRENT_USER
LazyWrite bool ֵΪtrue£ºÖ»Òª¹Ø±ÕÒ»¸ö¼ü£¬¾ÍÁ¢¼´·µ»ØÓ¦ÓóÌÐò¡£ÖµÎªfalse£º±ØÐëдÍê×¢²á±íºó²Å·µ»Ø¡£ÆäȱʡֵΪtrue¡£

TRegistryÀàµÄ·½·¨±È½Ï¶à£¬ÔñÆä³£ÓõļòҪ˵Ã÷ÈçÏ£º

·½·¨ ÃèÊö
CloseKey() ¹Ø±ÕÒ»¸ö¼üÖµ²¢Ïò¼üֵдÊý¾Ý£¬Ö»Òª¶Ô¼üÖµ²Ù×÷Íê±Ïºó¾ÍÓ¦¸Ã¹Ø±ÕËü£¬²»¹ýÄã¿ÉÒÔ²»±Øµ÷Óô˷½·¨£¬ÒòΪTRegistryµÄÎö¹¹º¯Êý»á×Ô¶¯µ÷ÓÃËü¡£
DeleteKey(AnsiString) ɾ³ý¼ £¬²ÎÊýΪҪɾ³ýµÄ¼üÖµ£¬Èç¹û²ÎÊýΪ¿Õ×Ö·û´®£¬Ôòɾ³ýµ±Ç°¼üÖµ
OpenKey(Ansistring,bool) ´ò¿ªÒ»¸ö¼üÖµ£¬Èç¹ûÕâ¸ö¼üÖµ²»´æÔÚ£¬½«Óɵڶþ¸ö²ÎÊý¾ö¶¨ÊÇ·ñ×Ô¶¯½¨Á¢¡£
LoadKey(AnsiString,AnsiString) ´ÓÎļþ×°Èë¼üÖµ£¬µÚÒ»¸ö²ÎÊýΪ¼üÖµ£¬µÚ¶þ¸ö²ÎÊýΪÎļþÃû
KeyExists(AnsiString) ¼ì²âÒ»¸ö¼üÖµÊÇ·ñ´æÔÚ¡£
SaveKey(AnsiString,AnsiString) °ÑÒ»¸ö¼üÖµ±£´æµ½Îļþ£¬²ÎÊý˵Ã÷²Î¼ûLoadKey()
ReadInteger(AnsiString) ¶Á³öÒ»¸ö¼üֵΪÕûÊý£¬Èç¹ûʧ°Ü½«Å׳öÒì³£¡£Í¬´Ëº¯ÊýÀàËÆµÄ»¹ÓÐReadBool()¡¢ReadString()¡¢ReadFloat()¡¢ReadDateTome()¡¢ReadBinaryData()µÈ£¬ÓÃÀ´¶Á³ö²»Í¬ÀàÐ͵ļüÖµ¡£
ValueExists(AnsiString) ¼ì²âÒ»¸öÖµÊÇ·ñ´æÔÚ¡£
WriteInteger(AnsiString,int) дһ¸ö¼üֵΪÕûÊý£¬Èç¹ûʧ°Ü½«Å׳öÒì³£¡£Í¬´Ëº¯ÊýÀàËÆµÄ»¹ÓÐWriteBool()¡¢WriteString()¡¢WriteFloat()¡¢WriteDateTome()¡¢WriteBinaryData()µÈ£¬ÓÃÀ´Ð´È벻ͬÀàÐ͵ļüÖµ¡£

ÀûÓÃTRegistryÊǺÜÈÝÒ׵ģ¬Ò»°ãÀ´Ëµ£¬ÓÐÒÔÏÂËIJ½²Ù×÷£º

1) ½¨Á¢TRegistryÀà
2)ÀûÓÃOpenKey()·½·¨´ò¿ªÒ»¸ö¼üÖµ
3)ÓÃReadType()ºÍWriteType()¶Áд¼üÖµ
4)µ÷ÓÃCloseKey£¨£©¹Ø±ÕÒ»¸ö¼üÖµ¡£

¡¡¡¡ÖµµÃ×¢ÒâµÄÊÇ£ºÔÚʹÓÃTRegistryÀàʱ£¬±ØÐëÒª¼ÓÈë´ËÀàµÄÍ·Îļþ£º#include$#@60;Rgistry.hpp$#@62;£¬·ñÔò»á·¢Éúʲô£¬Ö»ÒªÉÔÓÐCÓïÑÔ»ù´¡¶¼»áÃ÷°×¡£

¡¡¡¡ºÃÁË£¬ËµÁËÄÇô¶à£¬Ò²¸Ã¾ÙÒ»¸öʵÀýÀ´ËµÃ÷£¬ÏÂÃæÎÒ¾ÍÒÔÎҵġ¶WinNT×Ô¶¯µÇ¼¡·À´ËµÃ÷TRegistryÀàµÄÓ÷¨¡£

¡¡¡¡WinNTµÄÓû§¶¼ÖªµÀ,WinNTÔÚÆô¶¯Ê±ÐèÒª°´Ctrl+Alt+DelµÇ¼,¼´±ãûÓÐÃÜÂëÒ²ÊÇÈç´Ë.ËäÈ»WinNT²»»áÏó WIN9XÄÇÑù¾­³£ËÀ»ú,µ«Ã¿´Î¿ª»ú¶¼ÒªÕâÑù»¹ÊÇÓе㷳.ÄÜ ²»ÄÜÈÃWinNTÿ´ÎÆô¶¯×Ô¶¯µÇÂ¼ÄØ?ÆäʵֻҪ°Ñ×¢²á±íµÄÒ» ¸öÊôÐÔAutoAdminLogonµÄÖµÉèÖÃΪ"1"¼´¿É,¿ÉϧµÄÊÇÕâ Ñù×öÖ»ÄܹÜÒ»´Î,ÿ´ÎÆô¶¯ºóWinNT¾Í»á×Ô¶¯°ÑËüµÄÖµ¸ÄΪ "0"(¸ÃËÀµÄBill!).Èç¹ûÿ´Î¶¼ÒªÐÞ¸Ä×¢²á±í,»¹²»Èçÿ´ÎÊÖ¶¯µÇÂ¼ÄØ!д¸ö³ÌÐòÔÚÆô¶¯ºó×Ô¶¯ÐÞ¸ÄÕâ¸öÖµ¾ÍOKÁË¡£

¡¡¡¡Ê×ÏÈн¨Ò»¸ö¹¤³Ì£¬ÔÚ´°Ìå·ÅÈë4¸öÎı¾¿ò£¬·Ö±ðÃüÃûΪ£ºdUser¡¢edPasswd¡¢edRePasswd¡¢edDomain¡£·Ö±ðÓÃÀ´ÊäÈëÓû§Ãû¡¢µÇ¼¿ÚÁî¡¢ÖØÊä¿ÚÁîºÍÓò£¬°ÑedPasswdºÍedRePasswdµÄPasswordCharÊôÐÔ¸ÄΪ"*"(ÃÜÂ뷽ʽÊäÈë)¡£ÔÙ¼ÓÈë2¸ö¸´Ñ¡¿òÀ´Ñ¡ÔñÊÇ·ñ×Ô¶¯µÇ¼(chkAuto)ºÍ×Ô¶¯ÔËÐÐ(chkAutorun)£¬Ò»¸ö¶¨Ê±Æ÷(Timer1)£¬2¸ö°´Å¦(bbtOK¡¢bbtCancel)ºÍһЩLabel,µ÷Õû²¼¾ÖÈçÏÂͼ£º

´ò¿ª´úÂë´°¿Ú£¬ÔÚÍ·²¿ÊäÈëÒÔÏ´úÂ룺

#include TRegistry ®key=* new TRegistry();//¶¨ÒåÈ«¾Ö±äÁ¿£º×¢²á±íÀà¡£ int delay=0;//¶¨ÒåÈ«¾Ö±äÁ¿£¬ÑÓʱʱ¼ä

È»ºóÑ¡Ôñ´°ÌåµÄOnCreatʼþ£¬ÊäÈëÒÔÏ´úÂ룺

regkey.RootKey=HKEY_LOCAL_MACHINE;//ÉèÖøù¼ü //´ò¿ª×Ô¶¯µÇ¼ËùÔڵļü
regkey.OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",true);
//ÒÔÏÂ3¾ä´ò¿ªWindows×Ô¶¯ÔËÐеļüÖµ¡£ TRegistry &AutoRun=* new TRegistry(); AutoRun.RootKey=HKEY_LOCAL_MACHINE;
AutoRun.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",true);
if(strlen(CmdLine)>Application->ExeName.Length()+3)//Èç¹û´ø²ÎÊýÔËÐÐÔòÊÇÒªÐ¶ÔØ
{

AutoRun.DeleteValue("Windows NT Auto Logon");//ɾ³ý×Ô¼º¼ÓÈëµÄÊôÐÔ
regkey.DeleteValue("Windows NT Auto Logon"); delete &AutoRun;
Application->Terminate();//ÖÕÖ¹Ó¦ÓóÌÐò return; } //°Ñ±¾³ÌÐòдÈë×Ô¶¯ÔËÐС£
AutoRun.WriteString("Windows NT Auto Logon",Application->ExeName);
delete &AutoRun;
edDomain->Text=regkey.ReadString("DefaultDomainName"); //¶Á³öÓòÃû
edUser->Text=regkey.ReadString("DefaultUserName"); //¶Á³öÓû§Ãû
chkAuto->Checked=true;
chkAutorun->Checked=regkey.ReadString("Windows NT Auto Logon")=="1"?true:false; //±¾³ÌÐòÊÇ·ñ×Ô¶¯ÔËÐÐ
edPasswd->Text=regkey.ReadString("DefaultPasswd"); //¶Á³ö¿ÚÁî
setControl(!chkAutorun->Checked); //Èç¹ûÊÇ×Ô¶¯ÔËÐÐ״̬°ÑÆäËûÆÁ±Î£¬·´Ö®ÒàÈ»
if(chkAutorun->Checked)
{

Timer1->Enabled=true; //×Ô¶¯ÔËÐпªÊ¼¼ÆÊ± edRePasswd->Text=edPasswd->Text;

}

}

ÆäÖÐsetControl()µÄ¹¦ÄÜÊÇÆÁ±Î¼¸¸ö×é¼þ£¬¶¨ÒåÈçÏ£º

Ê×ÏÈÔÚ´°ÌåµÄÍ·Îļþ´°ÌåÀඨÒå¼ÓÈëvoid setControl(bool);

Æäº¯ÊýÌåÈçÏÂ(´°ÌåÃûΪfmMain)£º

void TfmMain::setControl(bool t)
{

edUser->Enabled= t;
edRePasswd->Enabled= t;
edPasswd->Enabled= t;
edDomain->Enabled= t;
chkAuto->Enabled= t;

}

ÔÚchkAutoRunµÄOnClickʼþÖиù¾ÝÊÇ·ñÑ¡ÔñÁË×Ô¶¯ÔËÐÐÀ´¾ö¶¨ÊÇ·ñÆô¶¯¶¨Ê±Æ÷

setControl(!chkAutorun->Checked);//Èç¹ûÊÇ×Ô¶¯ÔËÐÐ״̬°ÑÆäËûÆÁ±Î£¬·´Ö®ÒàÈ» if(!chkAutorun->Checked)
{

Timer1->Enabled=false;//Èç¹û²»ÊÇ×Ô¶¯ÔËÐУ¬¶¨Ê±Æ÷ʧЧ delay=0;

}
else

Timer1->Enabled=true;//·ñÔò¶¨Ê±Æ÷ÓÐЧ

ÔÚ°´Å¦bbtOKµÄOnClickʼþÖÐÊäÈëÒÔÏ´úÂ룬Æä¹¦ÄÜÊÇдÈë×¢²á±í¡£

if(edRePasswd->Text==edPasswd->Text)//Èç¹ûÃÜÂëÕýÈ·
{

regkey.WriteString("DefaultDomainName",edDomain->Text);//дÈëÓòÃû
regkey.WriteString("DefaultUserName",edUser->Text);//дÈëÓû§Ãû
regkey.WriteString("AutoAdminLogon",chkAuto->Checked?"1":"0");//дÈëÊÇ·ñ×Ô¶¯µÇ¼
regkey.WriteString("Windows NT Auto Logon",chkAutorun->Checked?"1":"0");//дÈëÊÇ·ñ×Ô¶¯ÔËÐÐ
regkey.WriteString("DefaultPasswd",edPasswd->Text);//дÈëÃÜÂë
if(!chkAutorun->Checked)//Èç¹û²»×Ô¶¯ÔËÐÐ
{

TRegistry &AutoRun=* new TRegistry();
AutoRun.RootKey=HKEY_LOCAL_MACHINE; //ÕÒµ½×Ô¶¯Æô¶¯
AutoRun.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",true);
AutoRun.DeleteValue("Windows NT Auto Logon");//ɾ³ý×Ô¼º¼ÓÈëµÄÊôÐÔ
delete &AutoRun;

}
Application->Terminate();//³ÌÐòÖÕÖ¹¡£

}
else

{

ShowMessage("ÃÜÂë´íÎó!"); edPasswd->Text="";

}

µ±³ÌÐò×Ô¶¯ÔËÐÐʱ£¬ÑÓʱ3ÃëºóдÈë×¢²á±í£¬ÔÚTimer1µÄOnTimerʼþÖÐдÈëÈçÏ´úÂ룺

delay++; if(delay>=3)//ÑÓʱÈýÃëµ½ bbtOK->Click();//µ¥»÷¡¶È·¶¨¡·°´Å¦£¬Ð´Èë×¢²á±í

È»ºóÔÚbbtCancelÖмÓÈëÖÕÖ¹³ÌÐòµÄ´úÂ룺Application->Terminate();ÎÒÃǵijÌÐò¾ÍËãÍê³ÉÁË£¬ÕæµÄÍêÁËÂð£¿NO£¡ÎÒÃÇÔÚ¿ªÊ¼µÄʱºîÓÃnewÉú³ÉÁËregkey£¬Ó¦¸ÃÒªÓÃdeleteɾ³ýËü£¬ËùÒÔÔÚ´°ÌåµÄOnCloseʼþÖмÓÈëdelete £¦regkey¾ÍOKÁË¡£

Èç¹ûÑ¡ÔñÁË×Ô¶¯ÔËÐУ¬³ÌÐò¾ÍÄÜÔÚÿ´ÎÆô¶¯Ê±ÑÓʱ3Ã룬ȻºóÔÚÐÞ¸Ä×¢²á±íÖÐÏàÓ¦µÄÏîºóÍ˳ö£¬ÊÍ·Åϵͳ×ÊÔ´¡£

ÔõôÑù£¿ºÜ¼òµ¥°É£¡Èç¹ûÎÒÃÇÆ½Ê±×¢ÒâÊÕ¼¯¡¶µçÄÔ±¨¡·µÈ±¨¿¯ÔÓÖ¾ÉϵÄÓйØ×¢²á±íÉèÖõÄÎÄÕ£¬ÔÙÓÐÁ˹¦ÄÜÇ¿´óʹÓ÷½±ãµÄC++Builder£¬ÎÒÃÇÒ²¿ÉÒÔд³öʲô"Windows ³¬¼¶ÉèÖÃ"Ö®ÀàµÄ³ÌÐòÁË¡£



¡¾·¢±íÆÀÂÛ¡¿¡¾¹Ø±Õ´°¿Ú¡¿