Projects

Find all our projects in development below.
All source code is GNU General Public License (GPL)

Winamp Hotkey Win2K/XP Edition

Browsing MainMod.bas (7.57 KB)

Attribute VB_Name = "MainMod"

Private Const GWL_WNDPROC = (-4)
Private Const WM_HOTKEY = &H312

Private AppWnd As Long
Public Const AppRegRoot = "Software\Winamp Hotkey Win2K\"

Private Const KEY_F1 = 112
Private Const KEY_F2 = 113
Private Const KEY_F3 = 114
Private Const KEY_F4 = 115
Private Const KEY_F5 = 116
Private Const KEY_F6 = 117
Private Const KEY_F7 = 118
Private Const KEY_F8 = 119
Private Const KEY_F9 = 120
Private Const KEY_F10 = 121
Private Const KEY_F11 = 122
Private Const KEY_F12 = 123

Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Integer) As Integer

Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long

Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const MOD_WIN = &H8

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private PrevWindowProc As Long

Private iAtom_PlayPauseBtn As Long
Private iAtom_StopBtn As Long
Private iAtom_NextBtn As Long
Private iAtom_PreviousBtn As Long
Private iAtom_FForwardBtn As Long
Private iAtom_FBackwardBtn As Long
Private iAtom_ToggleRepeatBtn As Long
Private iAtom_ToggleShuffleBtn As Long
Private iAtom_SaveSongTitleBtn As Long
Private iAtom_BackwardHotkey As Long
Private iAtom_ForwardHotkey As Long
Private iAtom_VolUpHotkey As Long
Private iAtom_VolDownHotkey As Long

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private Function IsCompatible() As Boolean
Dim verinfo As OSVERSIONINFO
    verinfo.dwOSVersionInfoSize = Len(verinfo)
    GetVersionEx verinfo
    If verinfo.dwMajorVersion >= 5 Then
        IsCompatible = True
    Else
        IsCompatible = False
    End If
End Function


Sub Main()
    If App.PrevInstance Then
        MsgBox "Winamp Hotkey Win2K/XP Edition is already running.", vbInformation
        End
    End If
    If IsCompatible = False Then
        MsgBox "Winamp Hotkey Win2K/XP Edition is not compatible with earlier operating systems.", vbInformation
        End
    End If
    SplashForm.Show
    AppWnd = MainForm.hWnd
    iAtom_PlayPauseBtn = GlobalAddAtom("PlayPauseBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_PlayPauseBtn, MOD_SHIFT, KEY_F1
    iAtom_StopBtn = GlobalAddAtom("StopBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_StopBtn, MOD_SHIFT, KEY_F2
    iAtom_NextBtn = GlobalAddAtom("NextBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_NextBtn, MOD_SHIFT, KEY_F3
    iAtom_PreviousBtn = GlobalAddAtom("PreviousBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_PreviousBtn, MOD_SHIFT, KEY_F4
    iAtom_FForwardBtn = GlobalAddAtom("FForwardBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_FForwardBtn, MOD_SHIFT, KEY_F5
    iAtom_FBackwardBtn = GlobalAddAtom("FBackwardBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_FBackwardBtn, MOD_SHIFT, KEY_F6
    iAtom_ToggleRepeatBtn = GlobalAddAtom("ToggleRepeatBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_ToggleRepeatBtn, MOD_SHIFT, KEY_F7
    iAtom_ToggleShuffleBtn = GlobalAddAtom("ToggleShuffleBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_ToggleShuffleBtn, MOD_SHIFT, KEY_F8
    iAtom_SaveSongTitleBtn = GlobalAddAtom("SaveSongTitleBtn Hotkey")
    RegisterHotKey AppWnd, iAtom_SaveSongTitleBtn, MOD_SHIFT, KEY_F10
    iAtom_BackwardHotkey = GlobalAddAtom("Backward Hotkey")
    RegisterHotKey AppWnd, iAtom_BackwardHotkey, MOD_CONTROL, 37
    iAtom_ForwardHotkey = GlobalAddAtom("Forward Hotkey")
    RegisterHotKey AppWnd, iAtom_ForwardHotkey, MOD_CONTROL, 39
    iAtom_VolUpHotkey = GlobalAddAtom("VolUp Hotkey")
    RegisterHotKey AppWnd, iAtom_VolUpHotkey, MOD_CONTROL, 38
    iAtom_VolDownHotkey = GlobalAddAtom("VolDown Hotkey")
    RegisterHotKey AppWnd, iAtom_VolDownHotkey, MOD_CONTROL, 40
    PrevWindowProc = SetWindowLong(AppWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub


Public Sub UnregisterHotkeys()
    UnregisterHotKey AppWnd, iAtom_PlayPauseBtn
    GlobalDeleteAtom iAtom_PlayPauseBtn
    UnregisterHotKey AppWnd, iAtom_StopBtn
    GlobalDeleteAtom iAtom_StopBtn
    UnregisterHotKey AppWnd, iAtom_NextBtn
    GlobalDeleteAtom iAtom_NextBtn
    UnregisterHotKey AppWnd, iAtom_PreviousBtn
    GlobalDeleteAtom iAtom_PreviousBtn
    UnregisterHotKey AppWnd, iAtom_FForwardBtn
    GlobalDeleteAtom iAtom_FForwardBtn
    UnregisterHotKey AppWnd, iAtom_FBackwardBtn
    GlobalDeleteAtom iAtom_FBackwardBtn
    UnregisterHotKey AppWnd, iAtom_ToggleRepeatBtn
    GlobalDeleteAtom iAtom_ToggleRepeatBtn
    UnregisterHotKey AppWnd, iAtom_ToggleShuffleBtn
    GlobalDeleteAtom iAtom_ToggleShuffleBtn
    UnregisterHotKey AppWnd, iAtom_SaveSongTitleBtn
    GlobalDeleteAtom iAtom_SaveSongTitleBtn
    UnregisterHotKey AppWnd, iAtom_BackwardHotkey
    GlobalDeleteAtom iAtom_BackwardHotkey
    UnregisterHotKey AppWnd, iAtom_ForwardHotkey
    GlobalDeleteAtom iAtom_ForwardHotkey
    UnregisterHotKey AppWnd, iAtom_VolUpHotkey
    GlobalDeleteAtom iAtom_VolUpHotkey
    UnregisterHotKey AppWnd, iAtom_VolDownHotkey
    GlobalDeleteAtom iAtom_VolDownHotkey
End Sub

Public Sub UnSubclass()
    SetWindowLong AppWnd, GWL_WNDPROC, PrevWindowProc
End Sub

Private Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
    If hWnd = AppWnd Then
        If uMsg = WM_HOTKEY Then
            Select Case wParam
                Case iAtom_PlayPauseBtn
                    If WAPlaybackStatus = 0 Then
                        WATrackPlay
                    ElseIf WAPlaybackStatus = 1 Then
                        WATrackPause
                    ElseIf WAPlaybackStatus = 2 Then
                        WATrackPlay
                    ElseIf WAPlaybackStatus = 3 Then
                        WATrackPlay
                    End If
                Case iAtom_StopBtn
                    WATrackStop
                Case iAtom_NextBtn
                    WATrackNext
                Case iAtom_PreviousBtn
                    WATrackPrev
                Case iAtom_FForwardBtn
                    WATrackFForward
                Case iAtom_FBackwardBtn
                    WATrackFRewind
                Case iAtom_ToggleRepeatBtn
                    WAToggleRepeat
                Case iAtom_ToggleShuffleBtn
                    WAToggleShuffle
                Case iAtom_SaveSongTitleBtn
                    WASaveSongTitle
                Case iAtom_BackwardHotkey
                    WATrackFRewind
                Case iAtom_ForwardHotkey
                    WATrackFForward
                Case iAtom_VolUpHotkey
                    WAVolRaise
                Case iAtom_VolDownHotkey
                    WAVolLower
            End Select
        End If
    End If
    WindowProc = CallWindowProc(PrevWindowProc, hWnd, uMsg, wParam, lParam)
End Function

Download MainMod.bas

Back to file list


Back to project page