How To Use Visual Basic to Locate CD-ROM Drives (291575)



The information in this article applies to:

  • Microsoft Visual Basic Professional Edition for Windows 5.0
  • Microsoft Visual Basic Professional Edition for Windows 6.0
  • Microsoft Visual Basic Enterprise Edition for Windows 5.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0

This article was previously published under Q291575

SUMMARY

You can find the drive letter of any CD-ROM drive on a local computer by using the Win32 API from Visual Basic. This can be useful during scenarios such as program setup and querying a user for media.

MORE INFORMATION

You can use the GetDriveType API to determine the type of drive referenced by a drive letter. By combining this API with a list of the active drive letters on a computer, you can search for CD-ROM drives available on that computer. Note that the API does not distinguish between types of CD-ROM drives, so for example, a DVD drive is considered a CD-ROM drive.

The following code sample demonstrates how to search for local CD-ROM drives by using Visual Basic.

Sample Code

  1. Start a new Visual Basic Standard EXE project. Form1 is created by default.
  2. Add a new command button (Command1) to Form1.
  3. Add the following code to Form1's code window:
    Option Explicit
    
    Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _
        (ByVal nDrive As String) As Long
    
    Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
        Alias "GetLogicalDriveStringsA" _
        (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    
    Const DRIVE_CDROM& = 5
    
    Public Function GetDriveStrings() As String
        ' Wrapper for calling the GetLogicalDriveStrings api
        
        Dim result As Long          ' Result of our API calls
        Dim strDrives As String     ' String to pass to API call
        Dim lenStrDrives As Long    ' Length of the above string
        
        ' Call GetLogicalDriveStrings with a buffer size of zero to
        ' find out how large our stringbuffer needs to be
        result = GetLogicalDriveStrings(0, strDrives)
        
        strDrives = String(result, 0)
        lenStrDrives = result
        
        ' Call again with our new buffer
        result = GetLogicalDriveStrings(lenStrDrives, strDrives)
        
        If result = 0 Then
            ' There was some error calling the API
            ' Pass back an empty string
            ' NOTE - TODO: Implement proper error handling here
            GetDriveStrings = ""
        Else
            GetDriveStrings = strDrives
        End If
    End Function
    
    Private Sub Command1_Click()
        Dim strDrives As String
        
        ' Find out what drives we have on this machine
        strDrives = GetDriveStrings()
        
        If strDrives = "" Then
            ' No drives were found
            MsgBox "No Drives were found!", vbCritical
        Else
            ' Walk through the string and check the type of each drive
            ' displaying any cd-rom drives we find
            Dim pos As Long
            Dim drive As String
            Dim drivetype As Long
            
            pos = 1
            
            Do While Not Mid$(strDrives, pos, 1) = Chr(0)
                drive = Mid$(strDrives, pos, 3)
                pos = pos + 4
                drivetype = GetDriveType(drive)
                If drivetype = DRIVE_CDROM Then
                    MsgBox "CD-ROM found at drive " & UCase(drive)
                End If
            Loop
        End If
    End Sub
     
    					
  4. Click Run or press the F5 key to run the project.
Result: Any CD-ROM drives on the computer are displayed by drive letter in a message box.

REFERENCES

For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:

190000 How To Get Started Programming with the Windows API

180766 VBA: Sample Code to Determine CD-ROM Drive Letter

291573 How To Use Visual Basic to List Active Logical Drives

The Visual Basic Programmer's Guide (available on MSDN Online, http://msdn.microsoft.com)


Modification Type:MajorLast Reviewed:4/5/2006
Keywords:kbAPI kbhowto kbsample KB291575