手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

用Delphi实现对光驱盘盒的开关控制

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  摘要 介绍在Delphi编程环境下实现开启光驱盘盒的主要技术和方法,该程序以托盘方式驻留状态栏中,可以设置为随系统启动而启动,不但能够控制一个光驱,而且还能动态检测某台电脑上的光驱数目,创建相应的控制菜单,实现有选择性控制光驱。

  关键词 Delphi程序 光驱控制 弹出菜单 过程 事件

  引言

  通常,我们打开和关闭光驱是通过按动光驱上开关按钮来实现的,但有时候手动方式显得很不方便,尤其是在一台电脑上安装多个光驱的情形下,同时光驱的损耗在手动方式下也是最大的,Delphi是个功能强大且容易的编程工具,可不可以利用编程方法来取代手工操作呢?通过摸索与实践终于将这一想法利用Delphi编程得以实现,该程序不但能够控制一个光驱,而且还可以选择性地控制某个光驱和所有光驱的开启与关闭,这对那些操作多个光驱而又懒得弯腰的电脑人确实会方便许多。

  编程思路

  编程思路:通过弹出菜单及事件控制光驱。

  1、弹出菜单的实现

  运行Delphi并新建一个工程, 在uses部分引用Registry, Mmsystem两个单元文件,在窗体中添加一个名称为PopmenuCDctrl弹出菜单组建,并添加6个菜单项,窗体TForm1的Popupmenu 项设为PopmenuCDctrl,PopmenuCDctrl的名称和主要属性赋值见表1。

  表1 TPopupmenu组建属性表


名称

组件类型

组件CAPTION

主要过程及事件

说明

mMenuTitle

TMenuItem

==光驱控制==



弹出菜单标签

mOpenCDROM

TMenuItem

打开CDROM盒

生成子菜单(

打开光驱子菜单

mCloseCDROM

TMenuItem

关闭CDROM盒

生成子菜单

关闭光驱子菜单

mAutoRun

TMenuItem

置启动时执行

mAutoRunClick

开机运行

mNotAutoRun

TMenuItem

自动执行无效

SetCDAutoRun(False)

取消开机运行

mCloseApp

TMenuItem

关闭控制程序

Application.Terminate;

关闭控制程序

  设置后的弹出菜单效果如图1所示所示,其中mOpenCDROM(打开CDROM盒)和mCloseCDROM(关闭CDROM盒)菜单将根据电脑中光驱个数自动生成相应的菜单栏目。



图1 弹出菜单效果图

  2、声明的变量和函数:

… …

procedure mCloseAppClick(Sender: TObject);
procedure mAutorunClick(Sender: TObject);
procedure mNotautorunClick(Sender: TObject);
procedure PopmenuCDctrlPopup(Sender: TObject);

private
 { Private declarations }
 procedure MenuOpenCdrom(Sender : TObject);
 procedure MenuCloseCdrom(Sender : TObject);
var
 Form1: TForm1;
 MYDRIVE:char;
 Mycdrom:pchar;
 tmppopmenu1,tmpPopmenu2:TMenuItem;
 function OpenCDROM(Drive:pChar):Boolean;
 function CloseCDROM(Drive:pChar):Boolean;
 implementation
 … …
  1)列出光驱数目和生成子菜单

procedure TForm1.PopupMenu1Popup(Sender: TObject);
 var Drive :char;
begin;
 mOpenCdrom.Clear; //清除打开光驱子菜单项
 mCloseCdrom.Clear; //清除打开光驱子菜单项
 //列出光驱数目和生成子菜单

 for Drive:='a' to 'z' do
 begin
  Case GetDriveType(Pchar(Drive ':\')) of
   DRIVE_REMOVABLE:
   MyDrive:=Drive;
   DRIVE_FIXED:
   MyDrive:=Drive;
   DRIVE_CDROM:
  begin
   MyDrive:=Drive;
   tmppopmenu1:=TMenuItem.Create(Self);
   tmppopmenu1.AutoHotkeys:=maManual;
   tmppopmenu1.OnClick := menuOpenCdrom;
   mOpenCDROM.Add(tmppopmenu1);
   tmppopmenu1.Caption :=UpperCase(mydrive) ':';
   tmppopmenu2:=TMenuItem.Create(Self);
   tmppopmenu2.AutoHotkeys:=maManual;
   tmppopmenu2.OnClick := menuCloseCdrom;
   mCloseCDROM.Add(tmppopmenu2);
   tmppopmenu2.Caption :=UpperCase(mydrive) ':';
 end;

 DRIVE_RAMDISK:
 MyDrive:=Drive;
 DRIVE_REMOTE:
 MyDrive:=Drive;
end;
end;

//当光驱多于1个生成“所有光驱”控制菜单项

if mOpenCDROM.Count > 1 then
begin
 tmppopmenu1:=TMenuItem.Create(Self);
 tmppopmenu1.Caption:='所有光驱';
 tmppopmenu1.OnClick := menuOpenCdrom;
 mOpenCDROM.Add(tmppopmenu1);
 tmppopmenu2:=TMenuItem.Create(Self);
 tmppopmenu2.Caption:='所有光驱';
 tmppopmenu2.OnClick := menuCloseCdrom;
 mCloseCDROM.Add(tmppopmenu2);
end;

end;
dfc   2)打开CDROM盒的函数

function OpenCDROM(Drive:pChar):Boolean; // 打开CDROM
var
 Res:MciError;
 OpenParm:TMCI_OPEN_Parms;
 Flags:Dword;
 s:string;
 DeviceID:Word;
begin
 Result:=false;
 s:=Drive ':';
 flags:=mci_Open_Type or mci_Open_Element;
 With OpenParm do
 begin
  dwCallBack:=0;
  lpstrDeviceType:='CDAudio';
  lpstrElementName:=PChar(s);

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS