本系列最終篇,完成右鍵彈出選單的各項事件處理:開啟/關閉指定或所有光碟機、設定/取消開機自動執行、退出程式。並說明如何將視窗隱藏至系統托盤區實現常駐後台功能。
procedure TForm1.mNotAutoRunClick(Sender: TObject);
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False) then begin
Reg.DeleteValue('MyStartup'); // 移除啟動項
end else
MessageBox(Handle, '開啟登錄表失敗。', '錯誤', MB_OK + MB_ICONERROR);
finally
Reg.CloseKey;
Reg.Free;
end;
end;
支援單一光碟機與「所有光碟機」批次操作:
procedure TForm1.MenuOpenCdrom(Sender: TObject);
var i: Integer;
begin
with Sender as TMenuItem do begin
// 最後一項為「所有光碟機」
if MenuIndex = mOpenCDROM.Count - 1 then begin
for i := 0 to MenuIndex - 1 do begin
MyCdrom := PChar(mOpenCDROM.Items[i].Caption);
OpenCdrom(MyCdrom);
end;
end else begin
MyCdrom := PChar(mOpenCDROM.Items[MenuIndex].Caption);
OpenCdrom(MyCdrom);
end;
end;
end;
procedure TForm1.MenuCloseCdrom(Sender: TObject);
var i: Integer;
begin
with Sender as TMenuItem do begin
if MenuIndex = mCloseCDROM.Count - 1 then begin
for i := 0 to MenuIndex - 1 do begin
MyCdrom := PChar(mCloseCDROM.Items[i].Caption);
CloseCdrom(MyCdrom);
end;
end else begin
MyCdrom := PChar(mCloseCDROM.Items[MenuIndex].Caption);
CloseCdrom(MyCdrom);
end;
end;
end;
procedure TForm1.mCloseAppClick(Sender: TObject);
begin
Application.Terminate;
end;

原文提到「將視窗隱去,放入狀態欄中」,實作步驟:
Shell_NotifyIcon API)TrayIcon.Icon := Application.Icon、TrayIcon.Visible := TrueFormShow 事件:Hide; WindowState := wsMinimized;TrayIcon.OnDblClick:Show; WindowState := wsNormal;(可選)Application.Terminate| 篇章 | 核心內容 |
|---|---|
| (一) | 彈出選單動態建立、光碟機掃描、MCI 開啟/關閉托盤核心函數 |
| (二) | OpenCDROM/CloseCDROM 函數細節、開機自動執行登錄表寫入 |
| (三) 本文 | 選單事件處理、批次操作、托盤化改造方向 |
mciSendCommand (MCI 控制介面) 操作 CDAudio 裝置HKLM\...\RunMCI_SET_DOOR_OPEN 可能無效DeviceIoControl + IOCTL_STORAGE_EJECT_MEDIA 通用介面此專案展示了 Delphi 快速呼叫 Windows 多媒體與登錄 API 的能力,掌握 MCI 與動態選單技巧,可擴充至 USB 裝置管理、虛擬光碟機掛載等更廣泛的儲存裝置控制應用。