首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 控制光碟機彈出/收回托盤完整實作(三):選單事件與自動執行管理

     編輯:Delphi

本系列最終篇,完成右鍵彈出選單的各項事件處理:開啟/關閉指定或所有光碟機、設定/取消開機自動執行、退出程式。並說明如何將視窗隱藏至系統托盤區實現常駐後台功能。

核心事件處理程序

1. 取消開機自動執行


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;

2. 開啟光碟機選單項目事件

支援單一光碟機與「所有光碟機」批次操作:


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;

3. 關閉光碟機選單項目事件


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;

4. 退出程式


procedure TForm1.mCloseAppClick(Sender: TObject);
begin
  Application.Terminate;
end;

執行效果與托盤化改造

最終彈出選單效果:開啟/關閉光碟機、自動執行管理、退出

將程式最小化至系統托盤(常駐後台)

原文提到「將視窗隱去,放入狀態欄中」,實作步驟:

  1. 拖曳 TTrayIcon 組件(Delphi 2009+ 內建,舊版用 Shell_NotifyIcon API)
  2. 設定 TrayIcon.Icon := Application.Icon、TrayIcon.Visible := True
  3. FormShow 事件:Hide; WindowState := wsMinimized;
  4. TrayIcon.OnDblClick:Show; WindowState := wsNormal;(可選)
  5. 選單項「退出」改為真正結束:Application.Terminate

完整系列回顧

篇章核心內容
(一)彈出選單動態建立、光碟機掃描、MCI 開啟/關閉托盤核心函數
(二)OpenCDROM/CloseCDROM 函數細節、開機自動執行登錄表寫入
(三) 本文選單事件處理、批次操作、托盤化改造方向

環境測試與相容性

  • 開發環境:Windows 2000 + Delphi 5.0
  • 核心 API:mciSendCommand (MCI 控制介面) 操作 CDAudio 裝置
  • 現代 Windows (10/11) 注意:
    - 需管理員權限寫入 HKLM\...\Run
    - 部分筆電光碟機無實體彈出機制,MCI_SET_DOOR_OPEN 可能無效
    - 建議改用 DeviceIoControl + IOCTL_STORAGE_EJECT_MEDIA 通用介面

此專案展示了 Delphi 快速呼叫 Windows 多媒體與登錄 API 的能力,掌握 MCI 與動態選單技巧,可擴充至 USB 裝置管理、虛擬光碟機掛載等更廣泛的儲存裝置控制應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved