Option Explicit
Public Icbellevue As NOTIFYICONDATA
Public Pt As POINTAPI
Public Jc As JOYCAPS
Public Ji As JOYINFO
Public Jix As JOYINFOEX
Public lpPrevWndProc As Long
Public BTEvent() As Long
Public iA As Integer, iB As Integer
Public lA As Long, x As Long, y As Long
Public Sub Main()
'Bellevue Joystick ne doit pas être déjà démarré
If App.PrevInstance Then End
'Vérifie la présence d'un gestionnaire de joystick
If joyGetNumDevs() = 0 Then
MsgBox "Pas de gestionnaire de joystick!", vbExclamation
End
End If
'Ajoute l'icône dans la barre des taches
With Icbellevue
.cbSize = Len(Icbellevue)
.hIcon = frmTray.Icon
.hwnd = frmTray.hwnd
.szTip = "Bellevue Joystick" & vbNullChar
.uCallbackMessage = WM_MOUSEMOVE
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uID = 1&
End With
Shell_NotifyIconA NIM_ADD, Icbellevue
'Capture les évenements de la fenêtre frmTray
lpPrevWndProc = SetWindowLongA(frmTray.hwnd, GWL_WNDPROC, AddressOf WindowProc)
'Capture les évenements du joystick
RetVal = joySetCapture(frmTray.hwnd, JOYSTICKID1, 0, False)
If RetVal Then
MsgBox "Impossible de capturer le joystick", vbExclamation
Fin
End If
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case MM_JOY1BUTTONDOWN
Select Case wParam
End Select
Debug.Print lParam
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Case MM_JOY1BUTTONUP
Select Case wParam
End Select
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Case MM_JOY1MOVE
GetCursorPos Pt
x = (LOWORD(lParam)) / 2048
y = (HIWORD(lParam)) / 2048
If x <= 12 Then
Pt.x = Pt.x + x - 17
ElseIf x >= 20 Then
Pt.x = Pt.x + x - 15
End If
If y <= 12 Then
Pt.y = Pt.y + y - 17
ElseIf y >= 20 Then
Pt.y = Pt.y + y - 15
End If
SetCursorPos Pt.x, Pt.y
End Select
WindowProc = CallWindowProcA(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End Function
Public Sub Fin()
'Supprime l'icône
Shell_NotifyIconA NIM_DELETE, Icbellevue
'Arrête la capture du joystick
joyReleaseCapture JOYSTICKID1
'Arrête la capture des évenements
RetVal = SetWindowLongA(frmTray.hwnd, GWL_WNDPROC, lpPrevWndProc)
Unload frmTray
End Sub