Click here to Skip to main content
11,639,765 members (64,891 online)
Rate this: bad
Please Sign up or sign in to vote.
See more: MFC VC++
I have a button on my application which is needed to enabled/disabled based on cd/dvd tray position. If the tray is opened the button should be disable, else enabled. Somebody please help me on that.
Posted 7-Apr-13 23:50pm

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

There is no Windows API function to get the open/close state for the tray of optical drives. You can use DeviceIoCtl() to check if such a drive has a media inserted indicating that the tray is actually closed.

To get notifications when the tray is closed or opened with inserted media, add a WM_DEVICECHANGE handler to your application and act upon DBT_DEVICEARRIVAL and DBT_DEVICEREMOVECOMPLETE. See How to receive notification of CD-ROM insertion or removal[^] in the MSDN.

If you really need to know the state of the tray when no media is inserted, you must directly ask the drive by calling DeviceIoCtl() with IOCTL_SCSI_PASSTHROUGH providing the required SCSI command descriptor blocks (send a Request Sense Command and check the returned Key Code Qualifier for the Not Ready - Tray open/close errors).

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Suvendu Shekhar Giri 330
1 CPallini 177
2 F-ES Sitecore 170
3 himanshu agarwal 167
4 Sergey Alexandrovich Kryukov 159
0 OriginalGriff 9,081
1 Sergey Alexandrovich Kryukov 8,847
2 Mika Wendelius 7,027
3 Suvendu Shekhar Giri 2,650
4 F-ES Sitecore 2,558

Advertise | Privacy | Mobile
Web02 | 2.8.150731.1 | Last Updated 8 Apr 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100