All pastes #75551 Raw Edit

Miscellany

public text v1 · immutable
#75551 ·published 2006-06-30 09:04 UTC
rendered paste body
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