




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用Delphi程序实现对光驱盘盒的开关控制 摘要 介绍在Delphi编程环境下实现开启光驱盘盒的主要技术和方法,该程序以托盘方式驻留状态栏中,可以设置为随系统启动而启动,不但能够控制一个光驱,而且还能动态检测某台电脑上的光驱数目,创建相应的控制菜单,实现有选择性控制光驱。关键词 Delphi程序 光驱控制 弹出菜单 过程 事件1 引言通常,我们打开和关闭光驱是通过按动光驱上开关按钮来实现的,但有时候手动方式显得很不方便,尤其是在一台电脑上安装多个光驱的情形下,同时光驱的损耗在手动方式下也是最大的,Delphi是个功能强大且容易的编程工具,可不可以利用编程方法来取代手工操作呢?通过摸索与实践终于
2、将这一想法利用Delphi编程得以实现,该程序不但能够控制一个光驱,而且还可以选择性地控制某个光驱和所有光驱的开启与关闭,这对那些操作多个光驱而又懒得弯腰的电脑人确实会方便许多。2 编程思路编程思路:通过弹出菜单及事件控制光驱。2.1弹出菜单的实现运行Delphi并新建一个工程, 在uses部分引用Registry, Mmsystem两个单元文件,在窗体中添加一个名称为PopmenuCDctrl弹出菜单组建,并添加6个菜单项,窗体TForm1的Popupmenu 项设为PopmenuCDctrl,PopmenuCDctrl的名称和主要属性赋值见表1。表1 TPopupmenu组建属性表名称组件
3、类型组件CAPTION主要过程及事件说明mMenuTitleTMenuItem=光驱控制=无弹出菜单标签mOpenCDROMTMenuItem打开CDROM盒生成子菜单(打开光驱子菜单mCloseCDROMTMenuItem关闭CDROM盒生成子菜单关闭光驱子菜单mAutoRunTMenuItem置启动时执行mAutoRunClick开机运行mNotAutoRunTMenuItem自动执行无效SetCDAutoRun(False)取消开机运行mCloseAppTMenuItem关闭控制程序Application.Terminate;关闭控制程序设置后的弹出菜单效果如图1所示所示,其中mOpen
4、CDROM(打开CDROM盒)和mCloseCDROM(关闭CDROM盒)菜单将根据电脑中光驱个数自动生成相应的菜单栏目。图1 弹出菜单效果图2.2声明的变量和函数: procedure mCloseAppClick(Sender: TObject); procedure mAutorunClick(Sender: TObject); procedure mNotautorunClick(Sender: TObject); procedure PopmenuCDctrlPopup(Sender: TObject);private Private declarations procedure M
5、enuOpenCdrom(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(
6、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.Creat
7、e(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); tmpp
8、opmenu2.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);
9、 tmppopmenu2:=TMenuItem.Create(Self); tmppopmenu2.Caption:=所有光驱; tmppopmenu2.OnClick := menuCloseCdrom; mCloseCDROM.Add(tmppopmenu2); end;end;2)打开CDROM盒的函数function OpenCDROM(Drive:pChar):Boolean; / 打开CDROMvarRes:MciError;OpenParm:TMCI_OPEN_Parms;Flags:Dword;s:string;DeviceID:Word;begin Result:=false
10、; s:=Drive+:; flags:=mci_Open_Type or mci_Open_Element; With OpenParm do begin dwCallBack:=0; lpstrDeviceType:=CDAudio; lpstrElementName:=PChar(s); end; Res:=mciSendCommand(0,mci_Open,Flags,Longint(OpenParm); If Res0 then exit; DeviceID:=OpenParm.wDeviceID ; try Res:=mciSendCommand(DeviceID,MCI_SET,
11、MCI_SET_DOOR_OPEN,0); If Res=0 then exit; Result:=True; finally mciSendCommand(DeviceID,mci_Close,Flags,Longint(OpenParm); end; end;3)关闭CDROM盒的函数function CloseCDROM(Drive:pChar):Boolean; / 关闭CDROMvarRes:MciError;OpenParm:TMCI_OPEN_Parms;Flags:Dword;s:string;DeviceID:Word;begin Result:=false; s:=Driv
12、e+:; flags:=mci_Open_Type or mci_Open_Element; With OpenParm do begin dwCallBack:=0; lpstrDeviceType:=CDAudio; lpstrElementName:=PChar(s); end; Res:=mciSendCommand(0,mci_Open,Flags,Longint(OpenParm); If Res0 then exit; DeviceID:=OpenParm.wDeviceID ; try Res:=mciSendCommand(DeviceID,MCI_SET,MCI_SET_D
13、OOR_CLOSED,0); If Res=0 then exit; Result:=True; finally mciSendCommand(DeviceID,mci_Close,Flags,Longint(OpenParm); end;end;4)置程序启动时执行菜单鼠标事件procedure TForm1.mAutorunClick(Sender: TObject);var Reg: TRegistry;begin if Application.ExeName= then / 判断应用程序文件名是否为空 begin MessageBox(Handle,应用程序名称不可以为空。,错误,MB
14、_OK+MB_ICONERROR); Exit; end; / 初始化AppFileName /GetMem(Application.ExeName,256); Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_LOCAL_MACHINE; if (Reg.OpenKey(SoftwareMicrosoftWindowsCurrentVersionRun,False)=True then begin / 在注册表中添加数值 Reg.WriteString(MyStartup,Application.ExeName); end else MessageBo
15、x(Handle,打开注册表失败。,错误,MB_OK+MB_ICONERROR); finally Reg.CloseKey; Reg.Free; end;end;5)程序自动执行无效的菜单鼠标事件procedure TForm1.mNotautorunClick(Sender: TObject);var Reg: TRegistry;begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_LOCAL_MACHINE; if (Reg.OpenKey(SoftwareMicrosoftWindowsCurrentVersionRun,False)=
16、True then begin / 在注册表中添加数值 Reg.DeleteValue(MyStartup); end else MessageBox(Handle,打开注册表失败。,错误,MB_OK+MB_ICONERROR); finally Reg.CloseKey; Reg.Free; end;end;6)打开光驱子菜单的事件过程procedure TForm1.MenuOpenCdrom(Sender : TObject);var i:integer;beginwith Sender as TMenuItem do begin if Menuindex = mOpenCDROM.Co
17、unt-1 then /判断鼠标是否点击”所有光驱”子菜单项 begin for i := 0 to Menuindex-1 do /打开所有光驱 begin / Menuindex:=i; Mycdrom :=pchar(mopenCdrom.Itemsi.Caption); OpenCdrom(Mycdrom); end; end else begin Mycdrom :=pchar(mopenCdrom.ItemsMenuindex.Caption); OpenCdrom(Mycdrom); end; end;7)关闭光驱子菜单事件过程procedure TForm1.MenuClose
18、Cdrom(Sender : TObject);var i:integer;beginwith Sender as TMenuItem do begin if Menuindex = mCloseCDROM.Count-1 then /判断鼠标是否点击”所有光驱”子菜单项 begin for i := 0 to Menuindex-1 do / /关闭所有光驱 begin Mycdrom :=pchar(mCloseCdrom.Itemsi.Caption); CloseCdrom(Mycdrom); end; end else Mycdrom :=pchar(mCloseCdrom.ItemsMenuindex.Caption); CloseCdrom(Mycdrom); end;end;8)关闭控制程序子菜单事件过程:procedure TForm1.mCloseAppClick(Sender: TObject);beginApplication.terminate; /程序终止end;通过上述的函数和过程实现了对光驱的控制,运行以下该程序,用鼠标右键点击所见窗口,弹出图2菜单效果,选择所要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新教科版小学三年级艺术教育计划
- 车位买卖协议
- 施工队伍入场协议示例
- 绿化咨询与评估协议
- 九年级数学课外辅导工作计划
- 文化活动安全保障与教育计划
- 2025年秋季人教版部编版数学家校合作计划
- 智慧城市孵化器委托运营协议范文
- 机动车维修后产品回馈合同
- 2019-2025年一级注册建筑师之建筑物理与建筑设备考前冲刺模拟试卷A卷含答案
- 2024版中国质量协会QC小组基础教程(课件99)1
- 考点3 三角函数与解三角形 五年(2020-2024)高考数学真题专项分类汇编(含答案)
- 2019鲁教版高中地理选择性必修第二册《第二单元 不同类型区域的发展》大单元整体教学设计2020课标
- 2023年航空服务消费者调查报告
- 航空公司客户服务沟通技巧考核试卷
- 服装店员工考勤管理制度
- 2024年国家图书馆招聘应届毕业生105人历年高频500题难、易错点模拟试题附带答案详解
- 铁路信号技师技术总结
- 建筑中级职称《建筑工程管理》历年考试真题题库(含答案)
- 洗瓶机推瓶机构设计计算说明书+运动简图+运动循环图
- 2024年山东省高中学业水平合格考生物试卷试题(含答案详解)
评论
0/150
提交评论