Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 186
  • Last Modified:

file not found

I'm trying to make a cd with a bunch of solitaire games. I made a menu program for the cd that shells to the games. As I don't know what my friend's cdrom drive letter is I used
Dim x
x = Shell(App.Path + "\filename.exe", 1)
It works fine in a directory on my HD but when I make the cd
I get a file not found error, all of the files are in the root directory of the CD. I'm using VB4 Pro ans sscommand buttons.I want to keep as much on the cd as possible with little to none being put on a HD.
1 Solution
1. The average PC has one CD ROM driver, so all you need is the driver letter of the CD Rom drive
2. Just incase there are more than one you can check the CD
ROM volume name match your cd title
3. The code below should give you an idea of how to do this :

Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _
        (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _
        (ByVal nDrive As String) As Long
       Public Const DRIVE_CDROM = 5

Add the following code to Form1.

Private Sub Form_Load()

       Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
End Sub

Private Sub cmdEnd_Click()

       Unload Me

End Sub

Private Sub cmdDriveInfo_Click()

       '      'get the available drives, determine their type,
       '      'and if CD, get the CD volume label
       Dim r As Long
       Dim DriveType As Long
       Dim allDrives As String
       Dim JustOneDrive As String
       Dim CDLabel As String
       Dim pos As Integer
       Dim CDfound As Boolean
       '      'pad the string with spaces
       allDrives$ = Space$(64)
       '      'call the API to get the string containing all drives
       r& = GetLogicalDriveStrings(Len(allDrives$), allDrives$)
       '      'trim off any trailing spaces. AllDrives$
       '      'now contains all the drive letters.
       allDrives$ = Left$(allDrives$, r&)
       '      'begin a loop

                     '      'first check that there is a chr$(0) in the string
                      pos% = InStr(allDrives$, Chr$(0))
                     '      'if there's one, then...
                      If pos% Then
                     '     'extract the drive up to the chr$(0)
                     JustOneDrive$ = Left$(allDrives$, pos% - 1)
                     '     'and remove that from the Alldrives string,
                     '     'so it won't be checked again
                     allDrives$ = Mid$(allDrives$, pos% + 1, Len(allDrives$))
                     '     'with the one drive, call the API to
                     '     'determine the drive type
                     DriveType& = GetDriveType(JustOneDrive$)
                     '     'check if it's what we want

                            If DriveType& = DRIVE_CDROM Then
                                   '      'got it (or at least the first one,
                                   '      'anyway, if more than one), so set
                                   '      'the found flag... this part can be modified
                                   '      'to continue searching remaining drives for
                                   '      'those systems that might have more than
                                   '      'one CD installed.
                                   CDfound = True
                                   CDLabel$ = rgbGetVolumeLabel(JustOneDrive$)
                                   '      'we're done for now, so get out
                                   Exit Do
                            End If

                      End If
                      Loop Until allDrives$ = "" Or DriveType& = DRIVE_CDROM
                     '      'display the appropriate message
                      If CDfound Then
                     Label2 = "The CD ROM drive on your system is drive " & UCase$(JustOneDrive$) & vbCrLf
                     Label2 = Label2 & "The volume label is " & CDLabel$
                      Else: Label2 = "No CD ROM drives were detected on your system."
                      End If
              End Sub

Private Function rgbGetVolumeLabel(CDPath$) As String

       '      'create working variables
       '      'to keep it simple, use dummy variables for info
       '      'we're not interested in right now
        Dim r As Long
        Dim DrvVolumeName As String
        Dim pos As Integer
        Dim UnusedVal1 As Long
        Dim UnusedVal2 As Long
        Dim UnusedVal3 As Long
        Dim UnusedStr As String
        DrvVolumeName$ = Space$(14)
        UnusedStr$ = Space$(32)
       '      'do what it says
        r& = GetVolumeInformation(CDPath$, _
       DrvVolumeName$, _
       Len(DrvVolumeName$), _
       UnusedVal1&, UnusedVal2&, _
       UnusedVal3&, _
       UnusedStr$, Len(UnusedStr$))
       '      'error check
        If r& = 0 Then Exit Function
       '      'the volume label
        pos% = InStr(DrvVolumeName$, Chr$(0))
        If pos% Then DrvVolumeName$ = Left$(DrvVolumeName$, pos% - 1)
        If Len(Trim$(DrvVolumeName$)) = 0 Then DrvVolumeName$ = "(no label)"
        rgbGetVolumeLabel = DrvVolumeName$
End Function


Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now