跳到主要内容

如何前台切换多开

比如有3个窗口,分别对应三个线程,分别控制窗口脚本。

那如何解决3个窗口图色,键鼠操作的冲突呢? 下面就是一个完整的前台切换3开模版. 用按键精灵的语法描述,其他语言类似.

主要是利用4.1320版本之后EnterCri和LeaveCri来实现.(类似E语言许可证的概念)

//之前插件的释放和注册部分省略
Set dm = createobject("dm.dmsoft")
dm_ret = dm.Reg("你的注册码","")
if dm_ret <> 1 then
messagebox "注册失败:"&dm_ret
endscript
end if

hwnds = dm.EnumWindow(0,"QQ三国","",1+4+8+16)
hwnds = split(hwnds,",")
if ubound(hwnds) <> 2 then
messagebox "没发现3个窗口"
endscript
end if

// 这里初始化临界区
dm.InitCri

// 分别开启3个线程控制每个窗口
BeginThread entry(clng(hwnds(0)))
BeginThread entry(clng(hwnds(1)))
BeginThread entry(clng(hwnds(2)))

do
delay 1000
loop

endscript

sub entry(hwnd)
TracePrint "句柄:"&hwnd
set dm = createobject("dm.dmsoft")
dm_ret = dm.BindWindow(hwnd,"normal","normal","normal",0)
do
Call 接任务()
Call 打怪()
Call 交任务()
loop
end sub



Sub接任务()
// 激活和取消激活必须成对调用. 否则脚本会卡死
call 激活窗口()
// 这里就是接任务代码.这里只是一个例子,实际中不可能整个接任务代码都被保护起来,那样太低效了.
call 取消激活窗口()
End Sub



Sub 打怪()

// 激活和取消激活必须成对调用. 否则脚本会卡死
call 激活窗口()
// 这里就是打怪代码
call 取消激活窗口()
End Sub



Sub 交任务()
// 激活和取消激活必须成对调用. 否则脚本会卡死
call 激活窗口()
// 这里就是交任务代码
call 取消激活窗口()
End Sub

Sub 激活窗口()
do
if dm.EnterCri() = 1 then
exit do
end if
delay 100
loop
dm.SetWindowState hwnd,12
delay 500
End Sub

Sub 取消激活窗口()
dm.LeaveCri
End Sub

Sub OnThreadExit()
dm.UnBindWindow
end Sub