大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 用Delphi5.0实现注册表监视

用Delphi5.0实现注册表监视

时间: 2021-07-31 作者:daque

中南京大学学湘雅二病院消息重心 朱洪涛跟着internet的连接普遍,搜集安定越来越遭到人们的关心。除去计划机宏病毒除外,网上连接展示的的各类黑客软硬件、长途遏制软硬件等,更让人们对本人的呆板越来越不释怀。而这类软硬件的百般性及连接革新等,使得单靠少许防宏病毒软硬件已不许实足养护本人的呆板。 有没有什么好的本领提防根源不明的软硬件安置在本人的呆板上呢?谜底即是出色提防体例要害文献的变革。大师都领会,一个步调即使要在windows启用时机动运转,普遍有三种本领: 1.在发端菜单的[启用]组中介入赶快办法 2.在win.ini中介入关系名目 3.在备案表的 hkey_local_machine\software\microsoft\windows\currentversion\run主键下介入指向本人的键值。 而第一种本领太鲜明,很简单创造。以是普遍的黑客步调运用后两种本领启用本人。笔者在此引见一个本人编写的大略的备案表监督器,用来及时监督备案表中键值的变革,以创造不明根源的步调。读者群有爱好的不妨在此普通长进一步完备。 步调安排思绪 本步调用delphi5.0开拓。delphi是borland公司出品的赶快可视化windows步调开拓东西,功效宏大,容易运用。步调中经过一个准时器来实行每隔确定功夫对备案表比拟一次。步调在启用时保持一份原始的备案表关系键值的数据备份,而后准时和暂时的键值举行比拟,即使创造变革,则提醒用户察看。 步调实行 1、在delphi中创造一个新的project,将form1更名为formmain 2、在formmain上安置一个准时器控件ttimer,将project生存为piregwatch.dpr 3、窜改piregwatch.dpr中的代码:  application.initialize; application.createform(tformmain, formmain); //使主窗口启用时不表露 application.showmainform:=false; application.run; 在formmain中减少几个东西。 东西典型证明 regtregistry用来备案表的考察 inifiletinifile用来生存原始备案表数据 logtstringlist用来记载变革的日记 regkeyststringlist用来寄存run分支下的主键名 4、在formmain:oncreate事变中保持原始备案表数据,重要代码如次: …… self.reg:=tregistry.create; with self.reg do begin rootkey:=hkey_local_machine; if openkey('software\microsoft\windows\currentversion\run',false)  then begin regkeys:=tstringlist.create; getvaluenames(regkeys); //博得run底下的一切主键名 if not self.inifile.sectionexists('runlist') then //即使没有生存过数据 begin for i:=0 to regkeys.count-1 do //生存原始数据 if (self.reg.getdatatype(regkeys.strings[i])=rdstring) or(self.reg.getdatatype(regkeys.strings[i])=rdexpandstring) then begin value:=self.reg.readstring(regkeys.strings[i]); self.inifile.writestring('runlist',regkeys.strings[i],value); end; end; end; end; …… 5、在ttimer1.ontmer事变中介入比拟备案表的代码。重要代码如次: procedure tformmain.timer1timer(sender: tobject); var i:integer; regval,inival:string; begin self.timer1.enabled:=false; self.reg.getvaluenames(regkeys); for i:=0 to regkeys.count-1 do //查看新加的和已窜改了的键值 if (self.reg.getdatatype(regkeys.strings[i])=rdstring) or (self.reg.getdatatype(regkeys.strings[i])=rdexpandstring) then begin regval:=self.reg.readstring(regkeys.strings[i]); inival:=self.inifile.readstring('runlist',regkeys.strings[i],''); if regval<>inival then begin self.logmsg('item add:'+regkeys.strings[i]+'='+regval); self.inifile.writestring('runlist',regkeys.strings[i],regval); try //提醒用户 sendmsg('abc','','备案表被变换:新增名目'+regkeys.strings[i]+'='+regval); finally end; end; end; self.inifile.readsection('runlist',regkeys); for i:=0 to regkeys.count-1 do //查看已被简略的键值 begin inival:=self.inifile.readstring('runlist',regkeys.strings[i],''); if self.reg.valueexists(regkeys.strings[i]) and ((self.reg.getdatatype(regkeys.strings[i])=rdstring) or (self.reg.getdatatype(regkeys.strings[i])=rdexpandstring) ) then regval:=self.reg.readstring(regkeys.strings[i]) else regval:=''; if (inival<>'') and (regval='') then begin self.logmsg('item del:'+regkeys.strings[i]+'='+inival); self.inifile.deletekey('runlist',regkeys.strings[i]); try sendmsg('abc','','备案表被变换:名目简略'+regkeys.strings[i]+'='+inival); finally end; end; end; self.inifile.updatefile; self.timer1.enabled:=true; end; 6、在formmain:onclose事变中举行东西开释及需要的整理处事 procedure tformmain.formclose(sender: tobject; var action:tcloseaction); begin if assigned(self.reg) then self.reg.free; if assigned(self.inifile) then self.inifile.free; if assigned(self.logfile) then self.logfile.free; if assigned(self.regkeys) then self.regkeys.free; end; 过程本质运转,该步调在创造根源不明的步调上面真实能起到确定的效率。固然,它的功效也很简单,即使要进一步完备,减少监督体例其余要害文献的变革,则功效会更好。蓄意能与有爱好的读者群交谈。 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.