Jag undrar om det finns något sätt att känna av när en CD-skiva matas in. Jag tvivlar på att man kan avbryta/stoppa den automatiska uppspelningen då man matar in en ny CD (åtminstone via kod - det går med tangentbordstryckningar).CD-inmatning
Jag skulle vilja att vare gång en skiva matas in i cd-enheten så ska mitt program startas upp.
sen skulle jag även vilja kunna blockera vissa cd-skivor, så att programmet har en lista över förbjudna skivor (varje skiva har om inte jag minns fel ett id-nr) och om skivan som matades in finns med i listan så ska skivan matas ut automatiskt och en dialogruta ska visas "Den här skivan är bannlyst av systemet" (eller nått sån't) annars ska skivan spelas upp som vanligt (enligt autorun.inf eller som audio-cd)...
behöver isåfall även veta hur man kommer åt cd-skivans id-nr...
kort sammanfattning av vad jag behöver veta:
*hur jag får mitt program att starta vid inmatning av cd-skiva
*hur jag får reda på cd-skivans id-nr
*hur jag sedan spelar upp skivan på standardvis (enligt autorun.inf eller med associerad cd-spelarprogramvara)
tack på förhand /TobiasSv: CD-inmatning
Däremot : Här har du koden för att få fram volymnamnet på en inmatad CD:
<code>
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
Declare Function GetVolumeInformation Lib "kernel32" _
Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As Long
Public Const DRIVE_CDROM = 5
Private Sub GetInfo()
'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 oneDrive 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.
'The API will return 0 if none, or the length of
'the string returned in 'allDrives' if successful.
r = GetLogicalDriveStrings(Len(allDrives), allDrives)
If r > 0 then
'trim off any trailing spaces. 'AllDrives'
'now contains all the drive letters.
allDrives = Left$(allDrives, r)
'begin a loop
Do
'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)
oneDrive = Left$(allDrives, pos - 1)
'and remove that from the allDrives string,
'so it won't be checked again
allDrives = Mid$(allDrives, pos + 1)
'with the one drive, call the API to
'determine the drive type
DriveType = GetDriveType(oneDrive)
'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(oneDrive)
'we're done for now, so get out
Exit Do
End If
End If
Loop Until (allDrives = "") Or (DriveType = DRIVE_CDROM)
End If
'display the appropriate message
If CDfound Then
MsgBox "The CD ROM drive on your system is drive " _
& UCase$(oneDrive) & vbCrLf _
& "The volume label is " & CDLabel
Else: MsgBox "No CD ROM drives were detected on your system."
End If
End Sub
Private Function rgbGetVolumeLabel(CDPath As String) As String
'create working variables
'to keep it simple, use dummy variables for info
'we're not interested in right now
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
If GetVolumeInformation(CDPath, _
DrvVolumeName, _
Len(DrvVolumeName), _
UnusedVal1, UnusedVal2, _
UnusedVal3, _
UnusedStr, Len(UnusedStr)) > 0 Then
'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 If
End Function
</code>
Hur man spelade upp CD-skiva (CD musik) kommer jag inte ihåg just nu - måste kolla upp det. Tror att det var API anrop med SndPlay eller något sådant...