Click here to Skip to main content
12,075,610 members (66,867 online)
Rate this:
 
Please Sign up or sign in to vote.
See more: MFC VisualC++
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 8-Apr-13 0:50am
WinAppy1.4K

1 solution

Rate this: bad
 
good
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).
  Permalink  

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

  Print Answers RSS
Top Experts
Last 24hrsThis month


Advertise | Privacy | Mobile
Web02 | 2.8.160208.1 | Last Updated 8 Apr 2013
Copyright © CodeProject, 1999-2016
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