Flash 将鼠标锁定到应用程序的中心

Flash 将鼠标锁定到应用程序的中心,flash,mouse,autohotkey,Flash,Mouse,Autohotkey,我用Flash创建了一个游戏(actionscript 2.0),它要求鼠标锁定在屏幕中央(就像第一人称射击游戏)。使用Flash 11.2在AS3中可以做到这一点,但在AS2中则不行。使用自动热键,我可以使用以下代码执行此操作: while (0=0){ MouseMove, 410, 302, 90 sleep 100 } Esc::ExitApp 这很好,但我不想为我的用户要求自动热键。有没有办法将该脚本转换为独立应用程序(.exe),或者用另一种语言创建此程序?(F

我用Flash创建了一个游戏(actionscript 2.0),它要求鼠标锁定在屏幕中央(就像第一人称射击游戏)。使用Flash 11.2在AS3中可以做到这一点,但在AS2中则不行。使用自动热键,我可以使用以下代码执行此操作:

while (0=0){
    MouseMove, 410, 302, 90 
    sleep 100
}

Esc::ExitApp
这很好,但我不想为我的用户要求自动热键。有没有办法将该脚本转换为独立应用程序(.exe),或者用另一种语言创建此程序?(Flash游戏不会从网络上启动)

有没有办法将该脚本转换为独立应用程序(.exe)

如果您已经正常安装了AHK,您应该能够右键单击.AHK文件并选择“编译脚本”


如果没有该选项,您也可以在“开始”菜单中查找“ahk2exe”编译器,该编译器将生成脚本的.exe输出。

您可以使用
wingtpos
动态设置X-Y坐标,而不是使用固定位置,因为固定位置在其他屏幕尺寸上的行为可能不同。要防止用户使用Atl+选项卡切换时鼠标“冻结”,您可以通过检查
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" ) 
}

while(0=0)
有点令人困惑,因为它的计算结果只是
while(true)
@user2079386,请提供一些建议解决方案的反馈,如果其中一个答案确实有用,请“接受”该答案。谢谢大家!<代码>#IfwinActive仅对热键有效,而对循环等普通代码无效。但你的另一个建议是good@mikew抢手货我应该测试它,而不是仅仅编写代码。使用计时器循环更改了它(仍未测试…。@user2079386,检查其他解决方案!