Gracias seba123neo, la clave era la función GetClientRect, para conseguir el rectángulo del objeto y después ClientToScreen para conseguir el punto del objeto y finalmente el OffsetRect para colocar al rectángulo.
Dejo el código para si alguien le sirve:
Public Sub Restringir(handle As Long)
Dim ObjectRect As RECT 'Declaramos el rectangulo (type RECT)
Dim Point As POINTAPI 'Declaramos el punto (el que será punto de partida del rectángulo, de ahí para la izquierda y para abajo)
GetClientRect handle, ObjectRect 'Obtenemos el rectángulo del objeto a través de su handle
ClientToScreen handle, Point 'Obtenemos el punto donde está colocado el objeto a través del handle
OffsetRect ObjectRect, Point.x, Point.y 'Recreamos el rectángulo esta vez colocándolo donde esta el objeto al que queremos restringir
Call ClipCursor(ObjectRect) 'Llamamos a la función que limita el cursor al rectángulo que hemos creado
' Si quisieramos que esto fuera realmente efectivo, que no se interrumpiera al hacer click, o al pasar a otro foco, etc... podríamos meter
' la función ClipCursor en un timer para que se repitiera consecutivamente sin tener porque crear otra vez el rectángulo.
End Sub
este es el sub para restringir el cursor al objeto mediante su hanlde
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Izquierda As Long
Arriba As Long
Derecha As Long
Abajo As Long
End Type
estos son los tipos del punto y el rectángulo
Private Declare Sub GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT)
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long)
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
las funciones que hay que declarar para restringir, creo que no me dejo ni una
a y gracias otra vez por la rápida respuesta