摘要 介绍在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; | 关闭控制程序 |
| … … 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 … … |
| 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; |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器