pubg辅助_从汉堡加料提及——浅谈C#中的Decorator模式和平精英辅助from win32com.client importDispatchimportosfrom random importuniformfrom time importsleepclassOpera

tion:def __init__(self, dm, hwnd):
self.dm=dm
self.hwnd=hwnd
self.dm.Reg('vacation6c113ef949e77e259bfadb84959f6cbc', '')
self.dm.Ver()
self.bind()defbind(self):
self.dm.BindWindowEx(self.hwnd,"normal", "normal", "normal", "", 0)
self.dm.SetSimMode(0)
self.dm.EnableRealKeypad(1)
self.dm.EnableRealMouse(2, 20, 30)
self.dm.SetKeypadDelay("normal", 70)
self.dm.SetClientSize(self.hwnd,596, 446)print(self.dm.GetClientSize(self.hwnd))print('绑定乐成')defgetwindowsize(self):
ret=self.dm.GetClientSize(self.hwnd)
self.width, self.height= ret[1], ret[2]print(self.width, self.height)def leftclick(self, xf, yf, ran_x, ran_y, delay=uniform(0.3, 0.5)):
x= xf uniform(0, ran_x)
y= yf uniform(0, ran_y)
self.dm.MoveTo(x, y)
self.dm.LeftClick()
sleep(delay)defkeypress(self, n):
self.dm.KeyPress(n)defkeyup(self, n):
self.dm.KeyUp(n)defkeydown(self, n):
self.dm.KeyDown(n)defregsvr():try:
dm_1= Dispatch('dm.dmsoft')exceptException:
os.system(r'regsvr32 /s %sdm.dll' %os.getcwd())
dm_1= Dispatch('dm.dmsoft')print(dm_1.Ver())return dm_1

直接剖析代码,代码是上一篇博客的拓展,基本上只在Operation类里添加了几个鼠键方式,同时将主函数转移到了另一个代码文件中。

getwindowsize()获取屏幕的长宽(暂时没有用到)

leftclick()将鼠标移动到指定位置并点击,通报的参数有4-5个,前两个是xy坐标后两个是xy坐标的偏移量,没有也要填0,最后一个是点击事后休息(默以为0.3-0.5秒),也可以手动传入。

keypress()按下后立马铺开某键,这个距离和是否设置随机时间有关,默认值也和绑定窗口键盘的模式有关(SetKeypadDelay("normal", 70))

keyup()按下某键不松

keydown()松开某键

后三个关于键盘的函数都需要传入一个键盘码(int类型),在绑定测试工具中的键盘测试页面可以找到。

以上代码为dmMain.py文件中,下面这段代码是另一个文件test.py文件。

from dmMain importOperationfrom win32gui importFindWindowfrom dmMain importregsvrdefclose_txt_1(operation_1):#随便点击两次考察光标
operation_1.leftclick(100, 10, 5, 5)
operation_1.leftclick(100, 180, 5, 5)defclose_txt_2(operation_1):#组合键 按下alt(不松) 然后按下f(松) 接着按下x(松) 松开alt
operation_1.keydown(18)
operation_1.keypress(70)
operation_1.keypress(88)
operation_1.keyup(18)if __name__ == '__main__':
window_id= FindWindow('Notepad', None)
dm_main=regsvr()
operation=Operation(dm_main, window_id)
close_txt_1(operation)#close_txt_2(operation)

这段代码中有两个函数,

第一个函数是随便点击记事本中的内容考察光标闪灼的位置,若是位置变换则鼠标事宜响应(此时注释掉了挪用第二个关闭记事本函数的语句便于考察)。

第二个则是使用键盘的简捷键关闭记事本的函数(处于被注释状态)。若是作废注释,运行后记事本关闭则键盘事宜响应了。,pubg辅助,


图为一个项目的文件  可供参考。在test.py文件中使用了    from dmMain import regsvr          from dmMain import Operation

两行代码将dmMain.py的所有功效引入。

为什么要这么做?若是要用dm做出一个成型的剧本,若是都放在一个py文件里会显得很乱。

注重:

1.上面的代码中封装的函数很简单只供树模和测试,不同人可以根据需要自己封装比较复杂的函数

2.代码中使用的是前台鼠标模式,若是有需要可以在绑定窗口时改成后台鼠标模式(不外似乎记事本并不支持后台鼠标模式,本人也没有测试完全,有待考证)

3.在鼠键事宜响应后只管加上一个休息时间(sleep),否则执行太快容易造成响应失灵的结果