用大漠插件绑魔域窗口做后台脚本,dx2图色加windows鼠标键盘模式,找图找色点击都正常,唯独鼠标移到装备或物品上面,提示框闪一下就没了,大概也就0.3秒左右,根本来不及识别上面的文字属性。这个问题很多写魔域脚本的人都碰到过,别人的辅助就能正常悬停看物品信息,自己写的就不行,试了一堆特殊属性也没用。下面把这个问题的根源和所有可行的解决路径从头到尾说清楚。
问题出在哪
先讲原理。魔域这个游戏里物品提示框的显示,靠的是鼠标停留在物品图标上方持续一小段时间后,游戏内部触发一个悬停计时器,时间到了就绘制提示窗体。提示框要一直保持显示,需要两个条件同时满足:一是鼠标指针坐标没有离开物品图标的矩形区域,二是游戏持续接收到鼠标在该区域内的状态信号。
用windows模式绑鼠标的时候,大漠是通过PostMessage或者SendMessage向目标窗口发送WM_MOUSEMOVE消息来模拟移动。这种消息模拟有个特点,它只在调用MoveTo的瞬间发一条消息过去,之后就不再发了。游戏窗口收到这条消息,知道鼠标挪过来了,于是启动悬停计时,大概几百毫秒后提示框弹出来。但问题在于,游戏为了判断鼠标是不是还在物品上面,会周期性地去读取当前鼠标的真实位置。当它发现真实的物理鼠标其实并不在窗口内,甚至根本不在物品坐标上,就会立刻关闭提示框,所以你看到的就是闪一下就没了。
简单说,windows鼠标模式只能模拟移动那一下,没法持续欺骗游戏的鼠标位置检测机制。游戏每帧或每隔几帧都会校验一次光标位置,一对不上就把提示刷掉。
换dx鼠标模式是最直接的办法
BindWindowEx第三个参数不要填windows,换成dx模式的属性组合。dx模式下,大漠是通过hook系统API的方式来伪造鼠标位置,游戏不管什么时候去读光标坐标,拿到的都是你设置的那个位置,这样悬停状态就能一直保持。
鼠标模式推荐从这个组合开始试:
text
dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api
绑定语句写成:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "windows", "", 0)
三个属性分别管不同的事。dx.mouse.position.lock.api是封锁GetCursorPos这类API,让游戏读到的鼠标位置永远是你最后一次MoveTo设置的坐标。这是保持悬停的核心,没有它游戏读到真实坐标就会把提示刷掉。dx.mouse.api是模拟dx鼠标输入,负责发送鼠标移动和点击的动作信号。dx.mouse.state.api是锁定鼠标按键状态,有些游戏会同时检查按键状态来判断是不是有效悬停,加上更稳妥。
如果上面这个组合绑完鼠标点击不正常,或者找图找色受影响,就换组合试。dx模式的属性有十几种,不是每个游戏都吃同一套,得自己测。
可以按顺序试下面这几组:
第一组,偏重位置锁定,悬停效果最好:
text
dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api|dx.mouse.api
第二组,加输入锁定,防止前台鼠标干扰:
text
dx.mouse.position.lock.api|dx.mouse.input.lock.api|dx.mouse.state.message|dx.mouse.api
第三组,兼容性组合,老版本游戏用得上:
text
dx.mouse.position.lock.api|dx.mouse.focus.input.api|dx.mouse.api
第四组,如果上面都不行,试试加raw.input(付费版才有):
text
dx.mouse.position.lock.api|dx.mouse.raw.input|dx.mouse.api
每组绑完都做同一件事:把鼠标移到一个物品图标上,停两秒,看提示框能不能一直显示。能稳定显示就说明这个组合可用。
public属性里有两个关键项
BindWindowEx的第五个参数,也就是public参数,很多人绑定时直接留空,其实这里面有两个属性对鼠标悬停有直接影响。
一个是dx.public.active.api,另一个是dx.public.active.message。这两个是管窗口激活状态的。有些游戏判断鼠标悬停时,会顺带检查窗口是不是处于激活状态,如果窗口没激活,就算鼠标在物品上也不显示提示,或者显示一下就消失。魔域在某些版本里就有这个逻辑。
public参数加上试试:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "windows", "dx.public.active.api|dx.public.active.message", 0)
dx.public.active.api是通过API层面让游戏以为自己窗口一直是激活的,dx.public.active.message是通过消息层面伪造激活状态。两个一起上,覆盖不同的检测方式。
还有一个dx.public.hide.dll可以加上,防止游戏检测到大漠的dll注入导致一些异常行为,虽然跟悬停没有直接关系,但绑定时加上没坏处,也不占什么资源。
鼠标移动方式也得改
模式换对了只是第一步,MoveTo怎么用也影响悬停效果。
有些新手写的是直接MoveTo到物品坐标,然后Delay 2000等提示出来。这种写法在部分游戏里没问题,但魔域有时候不吃这一套。因为游戏内部的悬停触发逻辑,有的是靠WM_MOUSEHOVER消息,有的是自己内部计时。如果MoveTo只调用一次,游戏可能只在最开始触发了一次移动事件,之后内部计时器因为某些原因被重置了。
更稳妥的写法是,移动到目标位置后,每隔一小段时间就再调用一次MoveTo,重复往同一个坐标发移动信号,相当于不断提醒游戏鼠标还在这。间隔不用太短,50到100毫秒一次就够了,太频繁反而占CPU。
写成循环大概是这样:
text
dm.MoveTo x, y
For i = 1 To 20
Delay 100
dm.MoveTo x, y
// 这里可以加检测提示框是否出现的判断
Next
循环次数和延时自己调,目标是让提示框稳定出现并保持到你识别完文字。
还有个技巧,移到物品上之前,先移到物品旁边,再慢慢移进去,模拟人手操作的轨迹。有些游戏的悬停检测对瞬移过去的鼠标不感冒,会认为不是真人操作,不触发提示。分两三步移过去,每步间隔十几毫秒,触发率会高很多。
实在不行就用微动法维持提示
有些版本的魔域防外挂做的比较严,不管你怎么换绑定模式,提示框就是持续不了多久,几十秒甚至几秒就掉一次。这种情况下可以用微动法来维持。
原理很简单,提示框消失的触发条件是鼠标移出了物品区域。那只要你在提示框快要消失的时候,让鼠标在物品区域内轻微动一下,挪一两个像素,游戏就会认为鼠标还在活动,重新触发悬停计时,提示框就续上了。
具体做法是移到物品坐标后,每隔一段时间就把鼠标往右挪1像素再挪回来,或者上下动一下。移动幅度要小,不能移出物品图标的范围。物品图标一般是40x40左右的格子,在这个范围内来回微动就不会让提示消失。
示例代码:
text
dm.MoveTo x, y
Delay 500
// 进入维持循环
Do
// 右移1像素
dm.MoveTo x + 1, y
Delay 50
// 移回来
dm.MoveTo x, y
Delay 800
// 这里加退出条件,比如识别完文字就跳出
Loop
间隔时间自己根据实际情况调。有的游戏提示框5秒才开始倒计时,那就4秒动一次。有的1秒就没,那就800毫秒动一次。动的幅度也可以调,1像素不行就2像素,以不触发提示框消失为准。
这个方法的好处是不挑绑定模式,哪怕你就是用windows模式,只要能触发提示框,用微动法也能维持住。坏处就是脚本逻辑稍微复杂一点,要控制好移动范围和频率。
键盘模式可能也有影响
别小看键盘模式,某些情况下键盘模式没选对也会间接影响鼠标悬停。因为大漠的键鼠模拟有些是共享底层hook的,键盘模式冲突或者不稳定,可能连带鼠标的状态锁定也出问题。
键盘如果用的是windows模式,鼠标悬停有问题的话,可以把键盘也换成dx模式试试:
text
dx.keypad.api
或者:
text
dx.keypad.input.lock.api
整套键鼠都走dx模式,底层一致性更好,不容易出奇怪的兼容问题。
绑定语句变成:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "dx.keypad.api", "dx.public.active.api", 0)
系统和游戏设置层面的排查
有些时候不是插件参数的问题,是系统或者游戏本身设置导致的。
首先是系统的鼠标悬停时间。Windows控制面板里有个鼠标悬停时间的设置,虽然主要是给系统自己的tooltip用的,但有些游戏会读这个值。默认是400毫秒,如果你改过,改成默认值试试。
然后是游戏里的设置。魔域设置界面里找一下有没有物品提示、鼠标提示相关的开关,确认是打开状态。有些版本默认提示时间很短,可以在设置里调长一点。
还有显卡驱动。dx2模式是靠hook DirectX来截图和模拟的,显卡驱动版本太老或者太新都可能出兼容性问题。如果之前一直正常,更新驱动后出问题了,回滚驱动版本试试。
另外要注意,绑定dx模式必须用管理员权限运行脚本。右键脚本或者按键精灵,选以管理员身份运行,不然很多API hook不上,绑了也是白绑,鼠标状态锁不住。
测试时要注意的几个坑
测悬停效果的时候,有几个地方容易踩坑,导致你以为某个模式不行,其实是测的方法不对。
第一个,绑定前窗口必须完全显示出来。有些模式比如dx.mouse.clip.lock.api,要求绑定前窗口是完整可见的,被挡住或者最小化状态下绑,效果会异常。所以测试的时候,先把游戏窗口摆好,完整显示在屏幕上,再运行绑定代码。
第二个,绑定时前台鼠标不要放在游戏窗口里。用了position.lock以后,如果你真实的鼠标正好也在窗口内,两个信号会打架,游戏一会儿读到假坐标一会儿读到真坐标,提示框就会一闪一闪的。测试时把前台鼠标挪到游戏窗口外面去,再观察效果。
第三个,不要只测一个物品。不同位置的物品可能触发情况不一样,比如背包第一格和最后一格,有时候因为坐标计算偏差,你以为移上去了,实际上偏了几个像素,刚好处在边缘,就会导致提示不稳定。多测几个位置,排除是坐标不准的问题。
第四个,绑定后先测后台找色是不是正常。有些人换了dx鼠标模式后,图色模式没配对,截图黑屏或者花屏,连物品在哪都找不到,更别说悬停了。绑完第一件事先Capture一张图看看,确认图色是好的,再测鼠标。
换个思路绕开悬停
如果上面所有方法都试了,悬停还是搞不定,那就换个思路,不通过悬停来获取物品信息。
魔域的物品信息,本质上都存在内存里。提示框只是把内存里的数据画出来给你看。既然读提示框这么费劲,不如直接读内存。
用大漠的内存读写功能,先找到物品数据的基址和偏移,读到物品的ID、属性、品质这些数据,比识别提示框上的文字靠谱多了,速度也快。当然这个门槛高一些,需要用CE之类的工具去找地址,对新手不太友好。但一旦写好,就再也不用跟悬停较劲了。
如果不想碰内存,还有个折中方案。有些版本的魔域,你把物品拖到某个特定位置(比如背包空格、装备栏)的时候,会在状态栏或者聊天框显示物品信息。这种情况下你不用悬停,拖一下物品就能读到信息,比悬停稳定。
完整的测试流程
给你一个从易到难的测试顺序,按这个步骤来,大多数情况都能找到能用的方案。
第一步,管理员身份运行脚本,确保权限没问题。游戏窗口完整显示,前台鼠标移出窗口。
第二步,用最基础的dx鼠标组合绑定:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api", "windows", "", 0)
绑完测MoveTo到物品上能不能持续显示提示。能就完事了,不能继续。
第三步,加上state属性和focus属性:
text
dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api|dx.mouse.focus.input.api
再测。
第四步,加上public的active属性:
text
dx.public.active.api|dx.public.active.message
再测。
第五步,键盘也换成dx模式,整套dx环境:
text
dx.keypad.api
再测。
第六步,如果还不行,就上微动法,在当前能用的模式下用循环微动维持提示框。
第七步,以上全失败,考虑读内存或者找替代操作路径。
别人的辅助为什么就行
最后说一下为什么你看别人的辅助也是大漠,人家就能正常悬停。原因很简单,人家的绑定参数跟你不一样。你看到的只是都叫大漠插件,但内部的模式组合、属性搭配、甚至调用方式都可能不同。
有些做辅助的人,鼠标用的是付费版大漠的高级属性,比如dx.mouse.raw.input、dx.mouse.input.lock.api2这些,免费版3.1233里没有,或者功能不完整。付费版的鼠标模拟更底层,兼容性自然更好。
还有些人不是纯靠大漠的鼠标悬停,而是用了上面说的微动法或者内存读取,表面上看跟悬停效果一样,底层实现完全不同。
另外就是大漠版本的问题。不同版本的大漠,同样的参数名,内部实现可能有差异。有些老版本对魔域的兼容性反而更好,新版本改了某些机制就不行了。如果你用的是最新版,可以退回去试试老版本,反过来也一样。
总之这个问题没有万能解,就是靠一个个模式组合去试,找到能在你当前系统和游戏版本下稳定工作的那一套。试的时候记好每个组合的效果,别试完就忘,到最后自己都不知道哪个能用哪个不能用。
问题出在哪
先讲原理。魔域这个游戏里物品提示框的显示,靠的是鼠标停留在物品图标上方持续一小段时间后,游戏内部触发一个悬停计时器,时间到了就绘制提示窗体。提示框要一直保持显示,需要两个条件同时满足:一是鼠标指针坐标没有离开物品图标的矩形区域,二是游戏持续接收到鼠标在该区域内的状态信号。
用windows模式绑鼠标的时候,大漠是通过PostMessage或者SendMessage向目标窗口发送WM_MOUSEMOVE消息来模拟移动。这种消息模拟有个特点,它只在调用MoveTo的瞬间发一条消息过去,之后就不再发了。游戏窗口收到这条消息,知道鼠标挪过来了,于是启动悬停计时,大概几百毫秒后提示框弹出来。但问题在于,游戏为了判断鼠标是不是还在物品上面,会周期性地去读取当前鼠标的真实位置。当它发现真实的物理鼠标其实并不在窗口内,甚至根本不在物品坐标上,就会立刻关闭提示框,所以你看到的就是闪一下就没了。
简单说,windows鼠标模式只能模拟移动那一下,没法持续欺骗游戏的鼠标位置检测机制。游戏每帧或每隔几帧都会校验一次光标位置,一对不上就把提示刷掉。
换dx鼠标模式是最直接的办法
BindWindowEx第三个参数不要填windows,换成dx模式的属性组合。dx模式下,大漠是通过hook系统API的方式来伪造鼠标位置,游戏不管什么时候去读光标坐标,拿到的都是你设置的那个位置,这样悬停状态就能一直保持。
鼠标模式推荐从这个组合开始试:
text
dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api
绑定语句写成:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "windows", "", 0)
三个属性分别管不同的事。dx.mouse.position.lock.api是封锁GetCursorPos这类API,让游戏读到的鼠标位置永远是你最后一次MoveTo设置的坐标。这是保持悬停的核心,没有它游戏读到真实坐标就会把提示刷掉。dx.mouse.api是模拟dx鼠标输入,负责发送鼠标移动和点击的动作信号。dx.mouse.state.api是锁定鼠标按键状态,有些游戏会同时检查按键状态来判断是不是有效悬停,加上更稳妥。
如果上面这个组合绑完鼠标点击不正常,或者找图找色受影响,就换组合试。dx模式的属性有十几种,不是每个游戏都吃同一套,得自己测。
可以按顺序试下面这几组:
第一组,偏重位置锁定,悬停效果最好:
text
dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api|dx.mouse.api
第二组,加输入锁定,防止前台鼠标干扰:
text
dx.mouse.position.lock.api|dx.mouse.input.lock.api|dx.mouse.state.message|dx.mouse.api
第三组,兼容性组合,老版本游戏用得上:
text
dx.mouse.position.lock.api|dx.mouse.focus.input.api|dx.mouse.api
第四组,如果上面都不行,试试加raw.input(付费版才有):
text
dx.mouse.position.lock.api|dx.mouse.raw.input|dx.mouse.api
每组绑完都做同一件事:把鼠标移到一个物品图标上,停两秒,看提示框能不能一直显示。能稳定显示就说明这个组合可用。
public属性里有两个关键项
BindWindowEx的第五个参数,也就是public参数,很多人绑定时直接留空,其实这里面有两个属性对鼠标悬停有直接影响。
一个是dx.public.active.api,另一个是dx.public.active.message。这两个是管窗口激活状态的。有些游戏判断鼠标悬停时,会顺带检查窗口是不是处于激活状态,如果窗口没激活,就算鼠标在物品上也不显示提示,或者显示一下就消失。魔域在某些版本里就有这个逻辑。
public参数加上试试:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "windows", "dx.public.active.api|dx.public.active.message", 0)
dx.public.active.api是通过API层面让游戏以为自己窗口一直是激活的,dx.public.active.message是通过消息层面伪造激活状态。两个一起上,覆盖不同的检测方式。
还有一个dx.public.hide.dll可以加上,防止游戏检测到大漠的dll注入导致一些异常行为,虽然跟悬停没有直接关系,但绑定时加上没坏处,也不占什么资源。
鼠标移动方式也得改
模式换对了只是第一步,MoveTo怎么用也影响悬停效果。
有些新手写的是直接MoveTo到物品坐标,然后Delay 2000等提示出来。这种写法在部分游戏里没问题,但魔域有时候不吃这一套。因为游戏内部的悬停触发逻辑,有的是靠WM_MOUSEHOVER消息,有的是自己内部计时。如果MoveTo只调用一次,游戏可能只在最开始触发了一次移动事件,之后内部计时器因为某些原因被重置了。
更稳妥的写法是,移动到目标位置后,每隔一小段时间就再调用一次MoveTo,重复往同一个坐标发移动信号,相当于不断提醒游戏鼠标还在这。间隔不用太短,50到100毫秒一次就够了,太频繁反而占CPU。
写成循环大概是这样:
text
dm.MoveTo x, y
For i = 1 To 20
Delay 100
dm.MoveTo x, y
// 这里可以加检测提示框是否出现的判断
Next
循环次数和延时自己调,目标是让提示框稳定出现并保持到你识别完文字。
还有个技巧,移到物品上之前,先移到物品旁边,再慢慢移进去,模拟人手操作的轨迹。有些游戏的悬停检测对瞬移过去的鼠标不感冒,会认为不是真人操作,不触发提示。分两三步移过去,每步间隔十几毫秒,触发率会高很多。
实在不行就用微动法维持提示
有些版本的魔域防外挂做的比较严,不管你怎么换绑定模式,提示框就是持续不了多久,几十秒甚至几秒就掉一次。这种情况下可以用微动法来维持。
原理很简单,提示框消失的触发条件是鼠标移出了物品区域。那只要你在提示框快要消失的时候,让鼠标在物品区域内轻微动一下,挪一两个像素,游戏就会认为鼠标还在活动,重新触发悬停计时,提示框就续上了。
具体做法是移到物品坐标后,每隔一段时间就把鼠标往右挪1像素再挪回来,或者上下动一下。移动幅度要小,不能移出物品图标的范围。物品图标一般是40x40左右的格子,在这个范围内来回微动就不会让提示消失。
示例代码:
text
dm.MoveTo x, y
Delay 500
// 进入维持循环
Do
// 右移1像素
dm.MoveTo x + 1, y
Delay 50
// 移回来
dm.MoveTo x, y
Delay 800
// 这里加退出条件,比如识别完文字就跳出
Loop
间隔时间自己根据实际情况调。有的游戏提示框5秒才开始倒计时,那就4秒动一次。有的1秒就没,那就800毫秒动一次。动的幅度也可以调,1像素不行就2像素,以不触发提示框消失为准。
这个方法的好处是不挑绑定模式,哪怕你就是用windows模式,只要能触发提示框,用微动法也能维持住。坏处就是脚本逻辑稍微复杂一点,要控制好移动范围和频率。
键盘模式可能也有影响
别小看键盘模式,某些情况下键盘模式没选对也会间接影响鼠标悬停。因为大漠的键鼠模拟有些是共享底层hook的,键盘模式冲突或者不稳定,可能连带鼠标的状态锁定也出问题。
键盘如果用的是windows模式,鼠标悬停有问题的话,可以把键盘也换成dx模式试试:
text
dx.keypad.api
或者:
text
dx.keypad.input.lock.api
整套键鼠都走dx模式,底层一致性更好,不容易出奇怪的兼容问题。
绑定语句变成:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api", "dx.keypad.api", "dx.public.active.api", 0)
系统和游戏设置层面的排查
有些时候不是插件参数的问题,是系统或者游戏本身设置导致的。
首先是系统的鼠标悬停时间。Windows控制面板里有个鼠标悬停时间的设置,虽然主要是给系统自己的tooltip用的,但有些游戏会读这个值。默认是400毫秒,如果你改过,改成默认值试试。
然后是游戏里的设置。魔域设置界面里找一下有没有物品提示、鼠标提示相关的开关,确认是打开状态。有些版本默认提示时间很短,可以在设置里调长一点。
还有显卡驱动。dx2模式是靠hook DirectX来截图和模拟的,显卡驱动版本太老或者太新都可能出兼容性问题。如果之前一直正常,更新驱动后出问题了,回滚驱动版本试试。
另外要注意,绑定dx模式必须用管理员权限运行脚本。右键脚本或者按键精灵,选以管理员身份运行,不然很多API hook不上,绑了也是白绑,鼠标状态锁不住。
测试时要注意的几个坑
测悬停效果的时候,有几个地方容易踩坑,导致你以为某个模式不行,其实是测的方法不对。
第一个,绑定前窗口必须完全显示出来。有些模式比如dx.mouse.clip.lock.api,要求绑定前窗口是完整可见的,被挡住或者最小化状态下绑,效果会异常。所以测试的时候,先把游戏窗口摆好,完整显示在屏幕上,再运行绑定代码。
第二个,绑定时前台鼠标不要放在游戏窗口里。用了position.lock以后,如果你真实的鼠标正好也在窗口内,两个信号会打架,游戏一会儿读到假坐标一会儿读到真坐标,提示框就会一闪一闪的。测试时把前台鼠标挪到游戏窗口外面去,再观察效果。
第三个,不要只测一个物品。不同位置的物品可能触发情况不一样,比如背包第一格和最后一格,有时候因为坐标计算偏差,你以为移上去了,实际上偏了几个像素,刚好处在边缘,就会导致提示不稳定。多测几个位置,排除是坐标不准的问题。
第四个,绑定后先测后台找色是不是正常。有些人换了dx鼠标模式后,图色模式没配对,截图黑屏或者花屏,连物品在哪都找不到,更别说悬停了。绑完第一件事先Capture一张图看看,确认图色是好的,再测鼠标。
换个思路绕开悬停
如果上面所有方法都试了,悬停还是搞不定,那就换个思路,不通过悬停来获取物品信息。
魔域的物品信息,本质上都存在内存里。提示框只是把内存里的数据画出来给你看。既然读提示框这么费劲,不如直接读内存。
用大漠的内存读写功能,先找到物品数据的基址和偏移,读到物品的ID、属性、品质这些数据,比识别提示框上的文字靠谱多了,速度也快。当然这个门槛高一些,需要用CE之类的工具去找地址,对新手不太友好。但一旦写好,就再也不用跟悬停较劲了。
如果不想碰内存,还有个折中方案。有些版本的魔域,你把物品拖到某个特定位置(比如背包空格、装备栏)的时候,会在状态栏或者聊天框显示物品信息。这种情况下你不用悬停,拖一下物品就能读到信息,比悬停稳定。
完整的测试流程
给你一个从易到难的测试顺序,按这个步骤来,大多数情况都能找到能用的方案。
第一步,管理员身份运行脚本,确保权限没问题。游戏窗口完整显示,前台鼠标移出窗口。
第二步,用最基础的dx鼠标组合绑定:
text
dm_ret = dm.BindWindowEx(hwnd, "dx2", "dx.mouse.position.lock.api|dx.mouse.api", "windows", "", 0)
绑完测MoveTo到物品上能不能持续显示提示。能就完事了,不能继续。
第三步,加上state属性和focus属性:
text
dx.mouse.position.lock.api|dx.mouse.api|dx.mouse.state.api|dx.mouse.focus.input.api
再测。
第四步,加上public的active属性:
text
dx.public.active.api|dx.public.active.message
再测。
第五步,键盘也换成dx模式,整套dx环境:
text
dx.keypad.api
再测。
第六步,如果还不行,就上微动法,在当前能用的模式下用循环微动维持提示框。
第七步,以上全失败,考虑读内存或者找替代操作路径。
别人的辅助为什么就行
最后说一下为什么你看别人的辅助也是大漠,人家就能正常悬停。原因很简单,人家的绑定参数跟你不一样。你看到的只是都叫大漠插件,但内部的模式组合、属性搭配、甚至调用方式都可能不同。
有些做辅助的人,鼠标用的是付费版大漠的高级属性,比如dx.mouse.raw.input、dx.mouse.input.lock.api2这些,免费版3.1233里没有,或者功能不完整。付费版的鼠标模拟更底层,兼容性自然更好。
还有些人不是纯靠大漠的鼠标悬停,而是用了上面说的微动法或者内存读取,表面上看跟悬停效果一样,底层实现完全不同。
另外就是大漠版本的问题。不同版本的大漠,同样的参数名,内部实现可能有差异。有些老版本对魔域的兼容性反而更好,新版本改了某些机制就不行了。如果你用的是最新版,可以退回去试试老版本,反过来也一样。
总之这个问题没有万能解,就是靠一个个模式组合去试,找到能在你当前系统和游戏版本下稳定工作的那一套。试的时候记好每个组合的效果,别试完就忘,到最后自己都不知道哪个能用哪个不能用。

