Attribute VB_Name = "WinAmpMod" 'WinampMod - winamp.bas 'By MidTerror - midterror@hotmail.com 'Feel free to mail comments, bugs, advice 'I'd appreciate it if you gave me some credit 'If you make a program out of this. If not 'then it's ok, but I wouldn't mind seeing the 'program, so feel free to send me programs you 'make with this. Option Explicit 'All the Declarations Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long Public Declare Function SendMessageCDS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As COPYDATASTRUCT) As Long Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_USER = &H400 Public Const WM_WA_IPC = WM_USER Public Const WM_COPYDATA = &H4A Public Const WM_COMMAND = &H111 Public Const WM_CHAR = &H102 'Registry Info Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Const HKEY_CLASSES_ROOT = &H80000000 Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Private Const WINAMP_REG_KEY = "WinAmp.File\shell\play\command" Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Private Const KEY_QUERY_VALUE = &H1 Public hwnd_winamp As Long Public Const WM_GETTEXT = &HD Public Const vbKeyShift = &H10 Public Const vbKeyCtrl = &H11 Public Const vbKeyAlt = &H12 Public Const IPC_DELETE = 101 Public Const IPC_ISPLAYING = 104 Public Const IPC_GETOUTPUTTIME = 105 Public Const IPC_JUMPTOTIME = 106 Public Const IPC_WRITEPLAYLIST = 120 Public Const IPC_SETPLAYLISTPOS = 121 Public Const IPC_SETVOLUME = 122 Public Const IPC_SETPANNING = 123 Public Const IPC_GETLISTLENGTH = 124 Public Const IPC_SETSKIN = 200 Public Const IPC_GETSKIN = 201 Public Const IPC_GETLISTPOS = 125 Public Const IPC_GETINFO = 126 Public Const IPC_GETEQDATA = 127 Public Const IPC_PLAYFILE = 100 Public Const IPC_CHDIR = 103 Public Const WINAMP_OPTIONS_EQ = 40036 Public Const WINAMP_OPTIONS_PLEDIT = 40040 Public Const WINAMP_VOLUMEUP = 40058 Public Const WINAMP_VOLUMEDOWN = 40059 Public Const WINAMP_FFWD5S = 40060 Public Const WINAMP_REW5S = 40061 Public Const WINAMP_BUTTON1 = 40044 Public Const WINAMP_BUTTON2 = 40045 Public Const WINAMP_BUTTON3 = 40046 Public Const WINAMP_BUTTON4 = 40047 Public Const WINAMP_BUTTON5 = 40048 Public Const WINAMP_BUTTON1_SHIFT = 40144 Public Const WINAMP_BUTTON4_SHIFT = 40147 Public Const WINAMP_BUTTON5_SHIFT = 40148 Public Const WINAMP_BUTTON1_CTRL = 40154 Public Const WINAMP_BUTTON2_CTRL = 40155 Public Const WINAMP_BUTTON5_CTRL = 40158 Public Const WINAMP_FILE_PLAY = 40029 Public Const WINAMP_OPTIONS_PREFS = 40012 Public Const WINAMP_OPTIONS_AOT = 40019 Public Const WINAMP_HELP_ABOUT = 40041 Public Type COPYDATASTRUCT dwData As Long cbData As Long lpData As String End Type 'Song Info Public Type Mp3InfoType Title As String Artist As String Album As String Year As Integer Genre As String Comment As String End Type Public Mp3Info As Mp3InfoType 'Gets path/filename Public Declare Function GetFullPathName Lib "kernel32" Alias "GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long 'TypeText Declares Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetForegroundWindow Lib "user32" () As Long Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Public Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer Public Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Const KEYEVENTF_KEYUP = &H2 Public Function TypeText(TextToType As String, WindowToTypeIn As Long) As Long 'This is a function I made to send text 'To a certain application using modules 'Has nothing to do with winamp, you can skip it, I use 'it in a different function Dim mVK As Long Dim mScan As Long Dim a As Integer Dim CurrentForeground As Long Dim GiveUpCount As Integer Dim ShiftDown As Boolean, AltDown As Boolean, ControlDown As Boolean If TextToType = "" Then Exit Function CurrentForeground = GetForegroundWindow() For a = 1 To Len(TextToType) mVK = VkKeyScan(Asc(Mid(TextToType, a, 1))) mScan = MapVirtualKey(mVK, 0) ShiftDown = (mVK And &H100) ControlDown = (mVK And &H200) AltDown = (mVK And &H400) mVK = mVK And &HFF GiveUpCount = 0 Do While GetForegroundWindow() <> WindowToTypeIn And GiveUpCount < 20 GiveUpCount = GiveUpCount + 1 SetForegroundWindow WindowToTypeIn DoEvents Loop If GetForegroundWindow() <> WindowToTypeIn Then TypeText = 0: Exit Function If ShiftDown Then keybd_event &H10, 0, 0, 0 If ControlDown And &H200 Then keybd_event &H11, 0, 0, 0 If AltDown And &H400 Then keybd_event &H12, 0, 0, 0 keybd_event mVK, mScan, 0, 0 If ShiftDown Then keybd_event &H10, 0, KEYEVENTF_KEYUP, 0 If ControlDown Then keybd_event &H11, 0, KEYEVENTF_KEYUP, 0 If AltDown Then keybd_event &H12, 0, KEYEVENTF_KEYUP, 0 Next a SetForegroundWindow CurrentForeground TypeText = 1 End Function Public Function RegGetString$(hInKey As Long, ByVal subkey$, ByVal valname$) 'I got this from Microsoft's page and editted it a bit 'Has nothing to do with winamp, you can skip it, I use 'it in a different function Dim RetVal$, hSubKey As Long, dwType As Long, SZ As Long, v$, r As Long RetVal$ = "" r = RegOpenKeyEx(hInKey, subkey$, 0, KEY_QUERY_VALUE, hSubKey) If r <> 0 Then Exit Function SZ = 256 v$ = String$(SZ, 0) r = RegQueryValueEx(hSubKey, valname$, 0, dwType, ByVal v$, SZ) If r = 0 And dwType = 1 Then RetVal$ = Left(v$, SZ - 1) Else RetVal$ = "" End If If hInKey = 0 Then r = RegCloseKey(hSubKey) RegGetString$ = RetVal$ End Function Public Function FindWinamp() As Long 'Find winamp window 'Returns 1 if winamp is open, 0 if not hwnd_winamp = FindWindow("Winamp v1.x", vbNullString) If hwnd_winamp Then FindWinamp = 1 Else FindWinamp = 0 End Function Public Function DeletePlayList() As Long 'Clears the play list DeletePlayList = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_DELETE) End Function Public Function IsPlaying() As Long 'Returns: '1 If playing '3 if paused '0 if stopped IsPlaying = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_ISPLAYING) End Function Public Function GetCurrentSongPosition() As Double 'Finds the current song position in milliseconds GetCurrentSongPosition = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETOUTPUTTIME) End Function Public Function GetSongLength() As Long 'Finds the song length in Seconds GetSongLength = SendMessage(hwnd_winamp, WM_WA_IPC, 1, IPC_GETOUTPUTTIME) End Function Public Function SetCurrentSongPosition(Optional Seconds As Long, Optional Ms As Long) 'Sets the current position in the song 'Returns: '0 if success '1 if eof '-1 if not playing SetCurrentSongPosition = SendMessage(hwnd_winamp, WM_WA_IPC, (Seconds * 1000 + Ms), IPC_JUMPTOTIME) End Function Public Function WritePlayList() As Long 'Writes the current playlist to C:\WINAMP_DIR\Winamp.m3u 'And then finds the play position 'Now obsolete, but good for old version of winamp 'Look at GetPlayListPosition WritePlayList = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_WRITEPLAYLIST) End Function Public Function SetPlayListPosition(Position As Integer) As Long 'Sets which song to play (0 being first) SetPlayListPosition = SendMessage(hwnd_winamp, WM_WA_IPC, Position, IPC_SETPLAYLISTPOS) End Function Public Function SetVolume(Volume As Integer) As Long 'Sets the volume (Volume must be between 0 - 255) SetVolume = SendMessage(hwnd_winamp, WM_WA_IPC, Volume, IPC_SETVOLUME) End Function Public Function SetPanning(PanPosition As Integer) As Long 'Sets the panning (PanPosition must be between 0 - 255) SetPanning = SendMessage(hwnd_winamp, WM_WA_IPC, PanPosition, IPC_SETPANNING) End Function Public Function GetPlayListLength() As Long 'Gets amount of songs in play list GetPlayListLength = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETLISTLENGTH) End Function Public Function GetPlayListPosition() As Long 'Returns which song its playing in the playlist '0 being first GetPlayListPosition = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETLISTPOS) End Function Public Function GetSamplerate() As Long 'Gets the samplerate GetSamplerate = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETINFO) End Function Public Function GetBitrate() As Long 'Gets the bitrate GetBitrate = SendMessage(hwnd_winamp, WM_WA_IPC, 1, IPC_GETINFO) End Function Public Function GetChannels() As Long 'Gets the channel GetChannels = SendMessage(hwnd_winamp, WM_WA_IPC, 2, IPC_GETINFO) End Function Public Function GetEQBandData(BandNumber As Integer) As Long 'Get each EQ banddata (0 being the first, 9 being last) 'Returns 0 - 255 If BandNumber > 9 Then Exit Function GetEQBandData = SendMessage(hwnd_winamp, WM_WA_IPC, BandNumber, IPC_GETEQDATA) End Function Public Function GetEQPreampValue() As Long 'Gets the preamp value (Between 0 - 255) GetEQPreampValue = SendMessage(hwnd_winamp, WM_WA_IPC, 10, IPC_GETEQDATA) End Function Public Function GetEQEnabled() '1 if EQ is enabled '0 if it isn't GetEQEnabled = SendMessage(hwnd_winamp, WM_WA_IPC, 11, IPC_GETEQDATA) End Function Public Function GetEQAutoLoad() '1 if EQ is autoloaded '0 if it isn't GetEQAutoLoad = SendMessage(hwnd_winamp, WM_WA_IPC, 12, IPC_GETEQDATA) End Function Public Function PlayFile(FileToPlay As String) As Long 'Adds FileToPlay to the play list Dim CDS As COPYDATASTRUCT CDS.dwData = IPC_PLAYFILE CDS.lpData = FileToPlay CDS.cbData = Len(FileToPlay) + 1 PlayFile = SendMessageCDS(hwnd_winamp, WM_COPYDATA, 0, CDS) End Function Public Function ChangeDirectory(Directory As String) As Long 'Changes directory Dim CDS As COPYDATASTRUCT CDS.dwData = IPC_CHDIR CDS.lpData = Directory CDS.cbData = Len(Directory) + 1 ChangeDirectory = SendMessageCDS(hwnd_winamp, WM_COPYDATA, 0, CDS) End Function Public Function ToggleEQWindow() As Long 'Turns on or off the EQ window ToggleEQWindow = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_OPTIONS_EQ, 0) End Function Public Function TogglePlayListWindow() As Long 'Turns on or off play list window TogglePlayListWindow = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_OPTIONS_PLEDIT, 0) End Function Public Function VolumeUp() As Long 'Raises the volume a tiny bit VolumeUp = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_VOLUMEUP, 0) End Function Public Function VolumeDown() As Long 'Sets the volume down a tiny bit VolumeDown = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_VOLUMEDOWN, 0) End Function Public Function Rewind() As Long 'Rewinds by 5 seconds Rewind = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_REW5S, 0) End Function Public Function FastForward() As Long 'Fast forwards by 5 seconds FastForward = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_FFWD5S, 0) End Function Public Function PreviousSong() As Long 'Plays the previous song PreviousSong = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON1, 0) End Function Public Function PlaySong() As Long 'Plays the current song PlaySong = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON2, 0) End Function Public Function PauseSong() As Long 'Pauses playing PauseSong = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON3, 0) End Function Public Function StopSong() As Long 'Stops playing StopSong = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON4, 0) End Function Public Function NextSong() As Long 'Plays the next song in the playlist NextSong = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON5, 0) End Function Public Function FadeStop() As Long 'slowly fades away until it stops FadeStop = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON4_SHIFT, 0) End Function Public Function Back10Songs() As Long 'Goes to the first song in the play list Back10Songs = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON1_CTRL, 0) End Function Public Function Forward10Songs() As Long 'Goes to the last song in the play list Forward10Songs = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON5_CTRL, 0) End Function Public Function OpenLocation() As Long 'Shows Open Location Dialog OpenLocation = PostMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON2_CTRL, 0) End Function Public Function LoadFile() As Long 'Shows Load a file dialog LoadFile = PostMessage(hwnd_winamp, WM_COMMAND, WINAMP_FILE_PLAY, 0) End Function Public Function ShowPreferences() As Long 'Shows Preferences Dialog ShowPreferences = PostMessage(hwnd_winamp, WM_COMMAND, WINAMP_OPTIONS_PREFS, 0) End Function Public Function ToggleAlwaysOnTop() As Long 'Turns Always On Top On and Off ToggleAlwaysOnTop = SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_OPTIONS_AOT, 0) End Function Public Function ShowAbout() As Long 'Shows About Box ShowAbout = PostMessage(hwnd_winamp, WM_COMMAND, WINAMP_HELP_ABOUT, 0) End Function Public Function ToggleRepeat() As Long 'Turns On/Off the repeat songs ToggleRepeat = TypeText("r", hwnd_winamp) End Function Public Function ToggleShuffle() As Long 'Turns On/Off the shuffle songs ToggleShuffle = TypeText("s", hwnd_winamp) End Function Public Function ToggleWindowShade() As Long 'Turns On/Off Window Shade mode keybd_event vbKeyCtrl, 0, 0, 0 ToggleWindowShade = TypeText("w", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleDoubleSize() As Long 'Turns on/off doublesize keybd_event vbKeyCtrl, 0, 0, 0 ToggleDoubleSize = TypeText("d", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleEasyMove() As Long 'turns on/off easy move keybd_event vbKeyCtrl, 0, 0, 0 ToggleEasyMove = TypeText("r", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleTimeDisplay() As Long 'Changes type of time display keybd_event vbKeyCtrl, 0, 0, 0 ToggleTimeDisplay = TypeText("t", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleMainWindow() As Long 'Hides/Shows winamp keybd_event vbKeyAlt, 0, 0, 0 ToggleMainWindow = TypeText("w", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleMiniBrowser() As Long 'Hides/Shows Mini Browser keybd_event vbKeyAlt, 0, 0, 0 ToggleMiniBrowser = TypeText("t", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ShowSkinBrowser() As Long 'Shows Skin Browser keybd_event vbKeyAlt, 0, 0, 0 ShowSkinBrowser = TypeText("s", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ShowVisualOptions() As Long 'Shows Visual Options keybd_event vbKeyAlt, 0, 0, 0 ShowVisualOptions = TypeText("o", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ShowConfigureVisualPlugin() As Long 'Shows Configuration for current visual plugin keybd_event vbKeyAlt, 0, 0, 0 ShowConfigureVisualPlugin = TypeText("k", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ToggleVisualPlugin() As Long 'Shows/Hides visual plugin keybd_event vbKeyAlt, 0, 0, 0 ToggleVisualPlugin = TypeText("K", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function ShowVisualPluginsSelect() As Long 'Shows visual plugins selection keybd_event vbKeyCtrl, 0, 0, 0 ShowVisualPluginsSelect = TypeText("k", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function StopAfterCurrentSong() As Long 'Stop playing after current song keybd_event vbKeyCtrl, 0, 0, 0 StopAfterCurrentSong = TypeText("v", hwnd_winamp) keybd_event vbKeyCtrl, 0, KEYEVENTF_KEYUP, 0 End Function Public Function OpenDirectory() As Long 'Shows Open Directory dialog OpenDirectory = TypeText("L", hwnd_winamp) End Function Public Function ShowInfoBox() As Long 'Shows info box for current song keybd_event vbKeyAlt, 0, 0, 0 ShowInfoBox = TypeText("3", hwnd_winamp) keybd_event vbKeyAlt, 0, KEYEVENTF_KEYUP, 0 End Function Public Function GetMp3Info() As Long 'Finds all the info about the current mp3 and sets 'Mp3Info to the info 'Mp3Info.Title = title 'Mp3Info.Artist = artist and so on Dim hwnd_InfoBox As Long Dim hwnd_TmpText As Long Dim TmpText As String * 35 Dim TextLen As Long ShowInfoBox DoEvents Do While hwnd_InfoBox = 0 DoEvents hwnd_InfoBox = FindWindow("#32770", "MPEG file info box + ID3 tag editor") Loop hwnd_TmpText = FindWindowEx(hwnd_InfoBox, 0, "Edit", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Title = Left(TmpText, TextLen) hwnd_TmpText = FindWindowEx(hwnd_InfoBox, hwnd_TmpText, "Edit", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Artist = Left(TmpText, TextLen) hwnd_TmpText = FindWindowEx(hwnd_InfoBox, hwnd_TmpText, "Edit", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Album = Left(TmpText, TextLen) hwnd_TmpText = FindWindowEx(hwnd_InfoBox, hwnd_TmpText, "Edit", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Year = Val(Left(TmpText, TextLen)) hwnd_TmpText = FindWindowEx(hwnd_InfoBox, hwnd_TmpText, "Edit", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Comment = Left(TmpText, TextLen) hwnd_TmpText = FindWindowEx(hwnd_InfoBox, 0, "ComboBox", vbNullString) TextLen = SendMessageS(hwnd_TmpText, WM_GETTEXT, Len(TmpText), TmpText) Mp3Info.Genre = Left(TmpText, TextLen) DoEvents hwnd_TmpText = FindWindowEx(hwnd_InfoBox, 0, "Button", "Cancel") TypeText Chr(13), hwnd_TmpText End Function Public Function GetWinampPath() As String 'Finds the path of winamp Dim WinampPath As String WinampPath = RegGetString(HKEY_CLASSES_ROOT, WINAMP_REG_KEY, "") If Len(WinampPath) < 8 Then GetWinampPath = "": Exit Function WinampPath = Mid(WinampPath, 2, Len(WinampPath) - 7) GetWinampPath = WinampPath End Function Public Function GetCurrentSongPath() As String 'Finds the path of the song currently playing Dim CurrentPosition As Integer Dim PathOfWinamp As String Dim CurrentSongPath As String Dim a As Integer CurrentPosition = WritePlayList() If CurrentPosition = -1 Then Exit Function PathOfWinamp = GetWinampPath If PathOfWinamp = "" Then Exit Function a = 1 Do While InStr(a + 1, PathOfWinamp, "\") a = a + 1 Loop PathOfWinamp = Left(PathOfWinamp, a) If FindWinamp = 0 Then Exit Function If WritePlayList = -1 Then Exit Function Open PathOfWinamp & "WINAMP.m3u" For Input As #1 Line Input #1, CurrentSongPath For a = 1 To (CurrentPosition + 1) Line Input #1, CurrentSongPath Line Input #1, CurrentSongPath Next a Close #1 GetCurrentSongPath = CurrentSongPath End Function Public Function GetPathOfSongInPlayList(PlayListPosition As Integer) 'Finds the path of the song in the playlist (0 being first) Dim PathOfWinamp As String Dim SongPath As String Dim a As Integer If PlayListPosition > GetPlayListLength() Then Exit Function PathOfWinamp = GetWinampPath If PathOfWinamp = "" Then Exit Function a = 1 Do While InStr(a + 1, PathOfWinamp, "\") a = a + 1 Loop PathOfWinamp = Left(PathOfWinamp, a) If FindWinamp = 0 Then Exit Function If WritePlayList = -1 Then Exit Function Open PathOfWinamp & "WINAMP.m3u" For Input As #1 Line Input #1, SongPath For a = 1 To (PlayListPosition + 1) Line Input #1, SongPath Line Input #1, SongPath Next a Close #1 If SongPath = "#EXTM3U" Then SongPath = "" GetPathOfSongInPlayList = SongPath End Function