摘要 介紹在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;