Use the hotkey Ctrl + NumPadNumber(0~9) to toogle cddoor
For example, the hotkey for second cdrom is Ctrl + 1
Some function should be added to set hotkey, use mouse to control, and so on, but I am too lazy to do that.
You need a icon to compile the code
thanks to GeoTrail, PB, Pille, GPI
Code: Select all
Enumeration 1
#MenuHotkey
#MenuQuit
EndEnumeration
Global Dim CDRomStatus(26)
Global CDRomNumber, CDIcon, DefaultCDROM
CDRomNumber = 0
DefaultCDROM = 0
;CDIcon = LoadIcon_(GetModuleHandle_(0), 1)
CDIcon = LoadImage(#PB_Any, "X:\sysTrayIcon.ico")
Procedure ToggleCDRomDoor(drive.s)
mciSendString_("Open " + drive + " Alias Drive" + drive + " Type CDAudio", 0, 0, 0)
timer = GetTickCount_()
mciSendString_("Set Drive" + drive + " Door Open", 0, 0, 0)
If GetTickCount_() - timer < 100
mciSendString_("Set Drive" + drive + " Door Closed", 0, 0, 0)
EndIf
EndProcedure
Procedure.s SelectDriveType(Drive$)
Select GetDriveType_(Drive$)
Case #DRIVE_REMOVABLE : DriveType$="Removable"
Case #DRIVE_FIXED : DriveType$="Fixed"
Case #DRIVE_REMOTE : DriveType$="Remote"
Case #DRIVE_CDROM : DriveType$="CD-ROM"
Case #DRIVE_RAMDISK : DriveType$="RAM Disk"
Default : DriveType$="Unknown"
EndSelect
ProcedureReturn DriveType$
EndProcedure
Procedure.s GetCDRomDriveName(n)
ProcedureReturn Chr(CDRomStatus(n)) + ":"
EndProcedure
Procedure CheckAllCDRom()
For i = 'A' To 'Z'
If SelectDriveType(Chr(i) + ":") = "CD-ROM"
CDRomStatus(CDRomNumber) = i
CDRomNumber = CDRomNumber + 1
EndIf
Next
EndProcedure
CheckAllCDRom()
If CDRomNumber = 0
MessageRequester("Error", "No CD-ROM driver found!")
EndIf
Procedure WindowCallback(WindowID, message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If message = #WM_HOTKEY
Debug GetCDRomDriveName(wParam - 1)
ToggleCDRomDoor(GetCDRomDriveName(wParam - 1))
EndIf
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 100, 150, 300, 100, "Set Hotkey", #PB_Window_Invisible | #PB_Window_ScreenCentered)
If CreatePopupMenu(0)
MenuItem(#MenuQuit, "E&xit")
EndIf
For i = 0 To CDRomNumber - 1
RegisterHotKey_(WindowID(0), i + 1, #MOD_CONTROL, #VK_NUMPAD0 + i)
Next
AddSysTrayIcon(1, WindowID(0), ImageID(CDIcon))
SetWindowCallback(@WindowCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID(0))
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #MenuQuit : End
EndSelect
EndSelect
ForEver
EndIf