2010-01-02 9 views
0

Je cours le code ci-dessous et je m'attends à ce que la souris se déplace au centre de la fenêtre actuellement active quand je frappe la virgule ..... à la place elle se déplace à différents points sur l'écran, en fonction de l'emplacement de la fenêtre sur l'écran. Il ne centre correctement la souris que lorsque la fenêtre est positionnée en haut à gauche (x = 0, y = 0).AutoHotkey MouseMove ne se centre pas correctement

#NoEnv 
SendMode Input 
#WinActivateForce 

Sysget, Mon2, Monitor, 2 

,:: 

WinGetActiveStats, Title, Width, Height, X, Y 
{ 
MsgBox, The active window "%Title%" is %Width% wide`, %Height% tall`, and positioned at %X%`,%Y%. 

;center_x:=X+(Width*.5) 
;center_y:=Y+(Height*.5) 

MouseMove, X+(Width*.5), Y+(Height*.5), 90 

} 
Return 

Répondre

0

Je serais sûr que Largeur et Hauteur sont les dimensions réelles de la fenêtre et non la résolution de l'écran. Ensuite, vérifiez X et Y pour vous assurer qu'ils sont le coin supérieur gauche de la fenêtre active.

Si la largeur et la hauteur ne proviennent pas de la fenêtre réelle, c'est-à-dire de la taille de l'écran, alors ceci est attendu. Vous pourriez peut-être nous montrer la fonction d'appel pour avoir une meilleure idée de l'origine de ces paramètres.

+0

Trey, Par le lien suivant, toutes les variables que j'ai utilisées doivent correspondre à la position/aux dimensions de la fenêtre active. http://autohotkey.free.fr/docs/commands/WinGetActiveStats.htm Le MsgBox montre que ceux-ci sont lus correctement, mais le mouseMove ne bouge toujours pas la souris à la bonne position. – user242113

0

le problème était que MousMove utilise les coordonnées de la fenêtre par défaut, donc j'ai changé la ligne MouseMove à ce qui suit:

MouseMove, Width*.5, Height*.5 

Tout est bon.

+0

Si vous avez résolu votre problème, vous devez le marquer comme résolu. – bgmCoder

0

Le script suivant déplace la souris vers la fenêtre active sur un système à deux écrans.

Je ne pouvais pas le faire fonctionner jusqu'à ce que je mets dans la ligne de sommeil, WinGetPos recevait des informations avant le déplacement de la fenêtre.

~#+right:: 
~#+left:: 
    Sleep,1000 
    WinGetPos, X, Y, width, height, A 
    center_x:=width/2 
    center_y:=height/2 
    MouseMove,center_x,center_y, 
return 
1

Consultez la documentation CoordMode.

Définit le mode de coordonnées pour que les différentes commandes soient relatives à la fenêtre active ou à l'écran.

CoordMode, infobulle | Pixel | Souris | Caret | Menu [, écran | Fenêtre | client]

La valeur par défaut est CoordModeScreen qui est la raison pour laquelle vous obtenez deux endroits différents. Définissez le CoordMode sur Window pour vous assurer que le centrage de la souris fonctionne sur la fenêtre active.

Vous pouvez le définir pour le script entier en l'appelant pendant la section Auto-Execute du script.