Je suis actuellement en train de développer un petit script pour mes besoins personnels : Chrome Remote Desktop, la WebApp de Google, permet de prendre la main sur ses ordinateurs distants. Je trouve cet outil très stable en terme de réponse et de rapidité (en tout cas, pour mon usage). Hors voilà - Il m'arrive parfois de jouer à des jeux directement via ce système.
Cependant, et là est ma problématique, à l'inverse de Stadia, Chrome Remote Desktop ne capture pas la souris comme le ferait n'importe quelle application OpenGL. Le soucis étant que le capture de la souris se fait sur l'ordinateur, mais pas à distance. Pour combler ce soucis et faire de Chrome Remote Desktop un "Stadia Gratuit" (le terme n'est pas vraiment adapté, étant donné que Stadia est un one-buy-time, que je possède déjà, j'attends sa sortie avec impatience. /o/).
J'ai donc pondu le script suivant en me basant sur l'exemple de HotKeySet() :
Global $g_bPaused = False, $g_bStop = False
Global $MouseX = 0
Global $MouseY = 0
Global $CaptureFocus = False
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("^{Enter}", "HotKeyPressed")
HotKeySet("^{q}", "HotKeyPressed")
While Not $g_bStop
Sleep(25)
If($CaptureFocus) Then
MouseMove($MouseX, $MouseY, 0)
EndIf
WEnd
Func HotKeyPressed()
Switch @HotKeyPressed
Case "{ESC}"
; Pause du programme
$CaptureFocus = False
Case "^{Enter}"
; Action à faire.
Local $aPosition = MouseGetPos()
$MouseX = $aPosition[0]
$MouseY = $aPosition[1]
$CaptureFocus = True
Case "^{q}" ; Fermer le programme
$g_bStop = True
EndSwitch
EndFunc
Global $MouseX = 0
Global $MouseY = 0
Global $CaptureFocus = False
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("^{Enter}", "HotKeyPressed")
HotKeySet("^{q}", "HotKeyPressed")
While Not $g_bStop
Sleep(25)
If($CaptureFocus) Then
MouseMove($MouseX, $MouseY, 0)
EndIf
WEnd
Func HotKeyPressed()
Switch @HotKeyPressed
Case "{ESC}"
; Pause du programme
$CaptureFocus = False
Case "^{Enter}"
; Action à faire.
Local $aPosition = MouseGetPos()
$MouseX = $aPosition[0]
$MouseY = $aPosition[1]
$CaptureFocus = True
Case "^{q}" ; Fermer le programme
$g_bStop = True
EndSwitch
EndFunc
ça fonctionne sur le principe, malheureusement l'usage de MouseMove(), même en speed 0, considère bien qu'il s'agit d'un déplacement. Le soucis, c'est donc que dans une application 3D, la caméra est bougé par le mouvement de la souris avant d'être réinitialisé après le Sleep(). Existerait-il une autre fonction, ou une option, qui permettrait de réinitialiser le curseur à sa position initiale, sans pour autant provoquer un mouvement ?
EDIT : Pour des soucis de sécurité, la liste des shortcuts du programme :
- CTRL + ENTER : Démarrer le freez de la souris.
- ESC : Arrêter le freez de la souris.
- CTRL+Q : Fermeture du programme (Arrête le freez de la souris s'il est en cours).