他の画面サイズでは動作が異なる可能性がある固定位置を使用する代わりにWinGetPos
、XY 座標を動的に使用および設定できます。Atlユーザーが+で切り替えたときにマウスが「フリーズ」するのを防ぐために、Tabでチェックして、ゲームの実行中にのみマウスをロックすることができますIfWinActive
。100 ミリ秒待機するループの代わりに、スクリプトを呼び出す 100 ミリ秒のタイマーを選択しましたが、ループまたは while を使用しても同様に機能します。
SetTitleMatchMode, 2
SetTimer, CheckWin, 100
CheckWin:
{
IfWinActive, YourAppNameHere ; ONLY runs when Your App is Active
{
WinGetPos, XStart, YStart, Width, Height, YourAppNameHere ; Use AHK Window Spy
XPos:=XStart+(Width/2)
YPos:=YStart+(Height/2)
MouseMove, %XPos%, %YPos%, 90
Return
}
}
^F1:: ; Ctrl+F1 to stop the timer based loop
SetTimer, CheckWin, Off
Return
別の解決策は次のとおりです。
#SingleInstance Force
#installKeybdHook
#Persistent
Xbutton2:: ; Toggle fix mouse in Center
Confine := !Confine
ClipCursor( Confine, A_ScreenWidth/2, A_ScreenHeight/2, A_ScreenWidth/2, A_ScreenHeight/2 )
Return
ClipCursor( Confine=True, x1=0 , y1=0, x2=1, y2=1 )
{
VarSetCapacity(R,16,0), NumPut(x1,&R+0),NumPut(y1,&R+4),NumPut(x2,&R+8),NumPut(y2,&R+12)
Return Confine ? DllCall( "ClipCursor", UInt,&R ) : DllCall( "ClipCursor" )
}