### Calculating cdplayer.ini id by algorithm

If you want to calculate the id - instead of using `GetVolumeInformation` - you may try this algorithm.
For Delphi sample and algorithm explanation, see here.
``````' Basic sample © Edy Hinzen 2001
Declare Function mciSendString Lib "WinMM" Alias "mciSendStringA" _
(ByVal lpszCommand As String, _
ByVal lpszString As String, _
ByVal Stringlen As Integer, _
ByVal hWnd As Long) As Integer

Function MilliSecsToFrames(milliSecs As Long) As Long
Const FRAME_PER_SEC = 75
Dim result As Long
result = milliSecs * FRAME_PER_SEC \ 1000
' Did the division have a reminder? Then increment result by 1
If milliSecs <> (result * 1000 \ FRAME_PER_SEC) Then result = result + 1
MilliSecsToFrames = result
End Function

Sub MCIDemo()
Dim iResult As Integer
Dim sResult As String * 30
Dim Min, Sec, frames As Long
Dim dwTemp As Long
Dim cdTotalTracks As Integer
Dim magicNumb As Integer
Dim cdLength As Long

Dim driveLetter\$
driveLetter = "!P: " ' in this example, we use drive P:\
'driveLetter = "" ' in this example, we use the first drive found

iResult = mciSendString("Open CDAudio" & driveLetter & "alias CDAudio shareable wait", "", 0, 0)
iResult = mciSendString("Status CDAudio Media Present wait", sResult, Len(sResult), 0)

iResult = mciSendString("Status CDAudio Number of Tracks", sResult, Len(sResult), 0)
cdTotalTracks = Val(sResult)

iResult = mciSendString("Set CDAudio time format tfmsf wait", 0, 0, 0)

dwTemp = 0
magicNumb = 0

For trackNum = 1 To cdTotalTracks
iResult = mciSendString("Status CDAudio Position Track " & Str(trackNum), sResult, Len(sResult), 0)

Min    = Val(Mid\$(sResult, 1, 2))
Sec    = Val(Mid\$(sResult, 4, 2))
frames = Val(Mid\$(sResult, 7, 2))
dwTemp  = dwTemp + ((Min * &H10000) + (Sec * &H100) + frames)

If (trackNum = 1) And (cdTotalTracks = 2) Then magicNumb = frames
Next trackNum

If cdTotalTracks < 3 Then
iResult = mciSendString("set CDAudio time format Milliseconds wait", 0, 0, 0)
iResult = mciSendString("Status CDAudio Length", sResult, Len(sResult), 0)

cdLength = MilliSecsToFrames(Val(sResult))

dwTemp = dwTemp + magicNumb + cdLength
End If

MsgBox Hex(Str(dwTemp)) ' display result

iResult = mciSendString("Close CDAudio", "", 0, 0)

End Sub
``````

back to Q&A