Option Explicit 

Public RetVal As Long

Public Type POINTAPI
    x As Long
    y As Long
End Type

Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Type NOTIFYICONDATA
    cbSize As Long
    hwnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
End Type

Public Type BROWSEINFO
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type

Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Public Const MAX_PATH = 260

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

Public Type JOYINFO
    wXpos As Long
    wYpos As Long
    wZpos As Long
    wButtons As Long
End Type

Public Type JOYINFOEX
    dwSize As Long
    dwFlags As Long
    dwXpos As Long
    dwYpos As Long
    dwZpos As Long
    dwRpos As Long
    dwUpos As Long
    dwVpos As Long
    dwButtons As Long
    dwButtonNumber As Long
    dwPOV As Long
    dwReserved1 As Long
    dwReserved2 As Long
End Type

Public Const MAXPNAMELEN = 32
Public Const MAX_JOYSTICKOEMVXDNAME = 260

Public Type JOYCAPS
    wMid As Integer
    wPid As Integer
    szPname As String * MAXPNAMELEN
    wXmin As Integer
    wXmax As Integer
    wYmin As Integer
    wYmax As Integer
    wZmin As Integer
    wZmax As Integer
    wNumButtons As Integer
    wPeriodMin As Integer
    wPeriodMax As Integer
    wRmin As Integer
    wRmax As Integer
    wUmin As Integer
    wUmax As Integer
    wVmin As Integer
    wVmax As Integer
    wCaps As Integer
    wMaxAxes As Integer
    wNumAxes As Integer
    szRegKey As String * MAXPNAMELEN
    szOEMVxD As String
End Type

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2

Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4

Public Const WM_ENABLE = &HA
Public Const WM_SETFOCUS = &H7
Public Const WM_KILLFOCUS = &H8
Public Const WM_ACTIVATEAPP = &H1C
Public Const WM_COMMAND = &H111
Public Const WM_MENUSELECT = &H11F
Public Const WM_ENTERIDLE = &H121
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_EXITMENULOOP = &H212

Public Const MK_LBUTTON = &H1

Public Const MM_JOY1MOVE = &H3A0
Public Const MM_JOY1ZMOVE = &H3A2
Public Const MM_JOY1BUTTONDOWN = &H3B5
Public Const MM_JOY1BUTTONUP = &H3B7

Public Const GWL_WNDPROC = (-4)

Public Const BIF_RETURNONLYFSDIRS = 1

Public Const INVALID_HANDLE_VALUE = -1

Public Const JOYSTICKID1 = 0
Public Const JOYSTICKID2 = 1

Public Const JOYERR_NOERROR = (0)
Public Const JOYERR_BASE = 160
Public Const JOYERR_PARMS = (JOYERR_BASE + 5)
Public Const JOYERR_NOCANDO = (JOYERR_BASE + 6)
Public Const JOYERR_UNPLUGGED = (JOYERR_BASE + 7)

Public Const MMSYSERR_BASE = 0
Public Const MMSYSERR_NOERROR = 0
Public Const MMSYSERR_ERROR = (MMSYSERR_BASE + 1)
Public Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)
Public Const MMSYSERR_NOTENABLED = (MMSYSERR_BASE + 3)
Public Const MMSYSERR_ALLOCATED = (MMSYSERR_BASE + 4)
Public Const MMSYSERR_INVALHANDLE = (MMSYSERR_BASE + 5)
Public Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)
Public Const MMSYSERR_NOMEM = (MMSYSERR_BASE + 7)
Public Const MMSYSERR_NOTSUPPORTED = (MMSYSERR_BASE + 8)
Public Const MMSYSERR_BADERRNUM = (MMSYSERR_BASE + 9)
Public Const MMSYSERR_INVALFLAG = (MMSYSERR_BASE + 10)
Public Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11)
Public Const MMSYSERR_HANDLEBUSY = (MMSYSERR_BASE + 12)
Public Const MMSYSERR_INVALIDALIAS = (MMSYSERR_BASE + 13)
Public Const MMSYSERR_LASTERROR = (MMSYSERR_BASE + 13)

Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
Public Const MOUSEEVENTF_MIDDLEUP = &H40
Public Const MOUSEEVENTF_ABSOLUTE = &H8000

Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Declare Function Shell_NotifyIconA Lib "shell32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Declare Function lstrcatA Lib "kernel32" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Public Declare Function FindFirstFileA Lib "kernel32" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFileA Lib "kernel32" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Public Declare Function joyGetPos Lib "winmm" (ByVal uJoyID As Long, pji As JOYINFO) As Long
Public Declare Function joyGetPosEx Lib "winmm" (ByVal uJoyID As Long, pji As JOYINFOEX) As Long
Public Declare Function joyGetDevCapsA Lib "winmm" (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long
Public Declare Function joyGetNumDevs Lib "winmm" () As Long
Public Declare Function joyGetThreshold Lib "winmm" (ByVal id As Long, lpuThreshold As Long) As Long
Public Declare Function joyReleaseCapture Lib "winmm" (ByVal id As Long) As Long
Public Declare Function joySetCapture Lib "winmm" (ByVal hwnd As Long, ByVal uID As Long, ByVal uPeriod As Long, ByVal bChanged As Long) As Long
Public Declare Function joySetThreshold Lib "winmm" (ByVal id As Long, ByVal uThreshold As Long) As Long
Public Function HIWORD(ByVal Num As Long) As Long
    HIWORD = CLng("&H" & Left(Right("00000000" & Hex(Num), 8), 4)) - 24 'Bit de poids fort
End Function
Public Function LOWORD(ByVal Num As Long) As Long
    LOWORD = CLng("&H" & Right(Right("00000000" & Hex(Num), 8), 4)) - 4 'Bit de poids faible
End Function