bode135 / pydamo

python写游戏外挂的工具箱
266 stars 78 forks source link

关于大漠插件的点击 #5

Closed wsfcsk closed 4 years ago

wsfcsk commented 4 years ago

我发现一个很诡异的事情,不同的机器上的反应都不一样 不管是左键还是右键都会失效,

os.system('regsvr32 dm.dll /s') dm = Dispatch('dm.dmsoft')

time.sleep(10)

moveToX = 100 moveToY = 100 while moveToX <= 1000: print("当前位置",moveToX) print("开始移动") dm.MoveTo(moveToX,moveToY) print("移动结束") print("开始点击") dm.RightDown() time.sleep(0.1) dm.LeftUp()

dm.RightClick()

print("点击结束")
print('开始睡眠')
time.sleep(2)
print("睡眠结束")
moveToX+=30

这是我的测试代码,我发现如果再桌面上,很多次都不会右键点击,但是move 会成功,如果我把鼠标放到sublmie 编辑器的前面,右键触发就会精准很多,但是还是会失效,但是一旦他右键,我这边用鼠标操作左键一次,他就会右键,然后我左键,他就继续右键,不会失败

bode135 commented 4 years ago

等回去测试下。。。 不过 print("开始点击") dm.RightDown() time.sleep(0.1) dm.LeftUp() 为什么RightDown下面接的是LeftUp呢……

wsfcsk commented 4 years ago

这个是笔误哈,之前我用left click ,发现不行就把clcik 动作拆开试试

bode135 commented 4 years ago

上个版本的left_click确实不太行, 检查了下Bug... 我重写了一下, 已经解决了. 测试代码(需要更新damo.py和my_time.py内容):

# 测试环境:  win10, pycharm, python-32位
# 测试结果: 没有右键偶尔失灵问题了

import numpy as np
from damo import Mouse, DM
from my_time import  tt

dm = DM()
ms = Mouse(dm)

y = 100
xs = np.arange(0, 1000, 30)[::-1]       # 正序容易被右键菜单栏干扰,换倒序
xs
len(xs)

for x in xs:
    if tt.stop('a'):    break

    tt.sleep(0.3)

    # Down-Up模式
    ms.click_right(x, y, 0.01)

    # click模式
    # ms.move_to(x, y)
    # tt.sleep(0.01)
    # dm.RightClick()

print('---------- End ------------')
wsfcsk commented 4 years ago

经过测试,应该不是你封装时候的问题,而是大漠本身的问题 由于我只需要驱动级别的鼠标左键,我就没有用你封装的库,直接调用大漠自己的LeftClick 发现很不稳定,而且和当前的桌面显示的东西有关,如果当前是sublime这样的编辑器,就很稳定,一旦换到正常桌面就无法每次都触发右键,

如果在他触发之前,我手动右键一下,那么大漠的右键一定就可以被触发,真的是搞不懂

我用压左键和释放右键,问题同样存在。。。不懂了。。。

wsfcsk commented 4 years ago

请问有没有大漠的说明文档我看看呢

谢谢

bode135 commented 4 years ago

请问有没有大漠的说明文档我看看呢

谢谢

说明文档在文件夹中

bode135 commented 4 years ago

封装的方法很简单的, 你可以修改damo.py文件中的left_click方法. 我这用的还算稳定.... 但好像dm.dll在按得太快的时候确实容易失灵.

你也可以换个按键模式试试. 在<大漠接口说明.CHW>里面

wsfcsk commented 4 years ago

Hi 我研究好些天,终于了有了结论 1.大漠的单击确实会出问题,可以拆开Up 和Down 加sleep来实现 2.我之所以之前拆分也会失败,是因为测试代码有问题,在进行了单击以后需要再sleep一下,否则马上重新点击就会失败

最后,谢谢你的帮助