程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi實現對光驅盤盒的開關控制(一)

用Delphi實現對光驅盤盒的開關控制(一)

編輯:Delphi
摘要 介紹在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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved