隐藏驱动器实例

一、   实例叙述  
   
    1、   程序名称:"隐藏驱动器"(Hide_Drive.exe)  
   
    2、   功能说明:  
   
     (1)用户可以选择"A驱"或"B驱",或同时选择"A驱"和"B驱",单击"隐藏"按钮,即可以隐藏"我的电脑"中的软盘驱动器。  
   
     (2)当程序启动时,可判断系统中软盘的当前状态。如果你的系统中软盘B已经是处于隐藏状态,程序启动时的界面则如图二所示。  
   
    3、   特别说明:此程序就是典型的对注册表进行读和写的操作。  
   
  二、   编程思想  
   
    (一)、注册表中隐藏驱动器的原理  
   
    1、在DOS、WIN9X/NT中,驱动器是用字母A-Z表示。其中A和B表示软盘驱动器,C到Z则表示硬盘或网络驱动器。也就是说,总共可以支持26个驱动器。  
   
    2、在注册表的  
   
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\explorer下新建或修改DWORD类型的NoDrives的值,可以隐藏或显示驱动器图标。从而达到本程序的目的。  
   
    3、NoDrives的取值特点  
   
    NoDrives是4字节共32位的键值。从第0位到第31位的取值,就分别控制着驱动器A到Z的状态。若第0位取值为1,则将隐藏驱动器A;若第1位为0,则显示驱动器B,如此类推即可。  
   
    (二)、DelPhi中对注册表的读写过程简介  
   
    在DelPhi中为程序员提供了一个Tregistry类,它提供了众多丰富的方法来完成对注册表的修改。限于篇幅,下面只针对本实例中所用到的读写注册表的方法进行简介:  
   
    (1)打开一个键:OpenKey();  
   
  function   OpenKey(const   Key:   String;   CanCreate:   Boolean):   Boolean;  
   
    (2)向一个键中写入整型数据:WriteInteger();  
   
  procedure   WriteInteger(const   Name:   string;   Value:   Integer);  
   
    (3)读取一个键中某个具体的整型数值:ReadInteger();  
   
  function   ReadInteger(const   Name:   String):   Integer;  
   
    (4)判断某一键值是否存在:ValueExists();  
   
  function   ValueExists(const   Name:   string):   Boolean;  
   
    (5)关闭一个键:CloseKey;  
   
  procedure   CloseKey;  
   
    (三)、设计方法(分为注册表的读写两部分)  
   
    1、"隐藏"按钮中代码的设计思想(注册表的写操作)  
   
    (1)、当用户单击"隐藏"按钮时,就利用OpenKey方法打开注册表的   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\explorer,判断其下是否存在"NoDrives"键。若此键不存在,就自动建立它。然后,根据用户选择的选择修改"NoDrives"的值。用户的选择和NoDrives的值对应关系如下:  
   
    用户选择"A驱",则NoDrives的值为:1;  
   
    用户选择"B驱",则NoDrives的值为:2;  
   
    用户同时选择"A驱"和"B驱",则NoDrives的值为:3;  
   
    (2)、根据用户的选择,利用方法WriteInteger(),将NoDrives的值写入注册表;  
   
    (3)、利用CloseKey关闭打开的主键。  
   
    2、(注册表的读操作)为了实现程序启动时能自动判断系统驱动器的当前状态,还要在Form1的FormCreate()方法中利用ReadInteger()和ValueExists()读取注册表中NoDrives的值。然后根据读出的NoDrives的值设置窗体上两个复选的选择状态。NoDrives的值与复选框的状态对应关系如下:  
   
    NoDrives的值为1,则窗体上"A驱"复选框处于选中状态;  
   
    NoDrives的值为2,则窗体上"B驱"复选框处于选中状态;  
   
    NoDrives的值为3,则窗体上"A驱"和"B驱"复选框同时处于选中状态;  
   
  三、设计过程  
   
    (一)、界面的建立  
   
    1、启动DelPhi5,新建一个窗体Form1;  
   
    2、在窗体Form1上建立三个TbitBtn按钮、两个复选框TcheckBox、一个GroupBox1,调整各对象的位置,使其与图一所示。  
   
    (二)   、代码编辑  
   
    1、要使程序能够正确访问注册表,必须在单元文件unit   Unit1的interface的   uses中增加注册表类:Registry。此句千万不能少。  
   
    2、按钮Bit_all("全选"按钮)中的代码如下:    
   
  procedure   TForm1.Bit_allClick(Sender:   TObject);  
  begin  
  A_check.Checked:=true;  
  B_check.Checked:=true;  
  end;   //当用户单击"全选"按钮时,将两个复选框都设为选中状态。  
   
    3、按钮Bit_cancel("取消"按钮)中的代码如下:  
   
  procedure   TForm1.Bit_cancelClick(Sender:   TObject);  
  begin  
  A_check.Checked:=false;  
  B_check.Checked:=false;  
  end;   //当用户单击"取消"按钮时,则取消复选框的选中状态。  
   
    4、按钮Bit_hide("隐藏"按钮)中的代码如下(主要程序代码均放在这里,当用户按此按钮时,即完成隐藏驱动器的目的):  
   
  procedure   TForm1.Bit_hideClick(Sender:   TObject);  
  var   myreg:TRegistry;   //   定义Tregistry型变量myreg  
  temp1,temp2,myval:integer;//temp1和temp2分别保存复选框A_check和B_check的值;  
  //myval用于保存写入注册表的最终值,它等于temp1和temp2的和。  
  begin  
  temp1:=0;  
  temp2:=0;  
  myval:=0;   //初始三个变量。  
  myreg:=TRegistry.Create;//利用Tregistry的Create方法创建一个实例myreg。  
  with   myreg   do  
  begin  
  rootkey:=HKEY_LOCAL_MACHINE;//确定打开注册表的主键。  
  if   openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\explorer',true)   then  
  begin   //打开NoDrives所在的键。  
  case   form1.A_Check.Checked   of  
  true:  
  temp1:=1;//当用户点击"A驱"复选框时,将临时变量temp1置1。  
  end;  
  case   form1.B_Check.Checked   of  
  true:  
  temp2:=2;   //当用户点击"B驱"复选框时,将临时变量temp2置2。  
  end;  
  myval:=temp1+temp2;//将临时变量temp1和temp2中的值求和赋给myval。因为用户可,  
  //能选中两个复选框,此时写入注册表的值应为1+2,所以用temp1与temp2的和赋给myval。  
  WriteInteger('NoDrives',myval);//利用函数创建一个Dword值"NoDrives",其值为myval  
  //并写入注册表。  
  myreg.CloseKey;//关闭前面打开的主键,完成隐藏操作。  
  myreg.Free;  
  end;  
  end;  
  end;  
   
    5、为了实现程序启动时能自动判断系统驱动器的当前状态,还要在Form1的FormCreate()方法中利用ReadInteger()和ValueExists()读取注册表中NoDrives的值。然后根据读出的NoDrives的值设置窗体上两个复选的选择状态。程序如下:  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var   myreg:TRegistry;  
  begin  
  myreg:=TRegistry.Create;  
  with   myreg   do  
  begin  
  rootkey:=HKEY_LOCAL_MACHINE;  
  if   openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\explorer',true)   and   ValueExists('NoDrives')   then   //如果打开键成功且NoDrives存在,则进行下面操作。  
  begin  
  if   readinteger('NoDrives')=1   then   //读取NoDrives的值,若为1,则将A_check设为选中。  
  A_check.Checked:=true;  
  if   readinteger('NoDrives')=2   then//读取NoDrives的值,若为2,则将B_check设为选中。  
  B_check.Checked:=true;  
  if   readinteger('NoDrives')=3   then//读取NoDrives的值,若为3,则将两个复选框均选中。  
  begin  
  A_check.Checked:=true;  
  B_check.Checked:=true;  
  end;  
  myreg.CloseKey;  
  myreg.Free;  
  end;  
  end;  
  end;  
   
    6、将以上程序保存为Hide_drive,然后编译成可执行程序Hide_Drive.exe即可。此程序在Win2000和Delphi5中运行通过。操作时隐藏了驱动器,请重新注销windows即可看到实际效果。    

转载于:https://www.cnblogs.com/bsoom/archive/2009/11/11/1601232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值