from win32com.client import Dispatch
import os
from random import uniform
from time import sleep class Operation: def __init__(self, dm, hwnd):
self.dm = dm
self.hwnd = hwnd
self.dm.Reg('vacation6c113ef949e77e259bfadb84959f6cbc', '')
self.dm.Ver()
self.bind() def bind(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('绑定成功') def getwindowsize(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) def keypress(self, n):
self.dm.KeyPress(n) def keyup(self, n):
self.dm.KeyUp(n) def keydown(self, n):
self.dm.KeyDown(n) def regsvr():
try:
dm_1 = Dispatch('dm.dmsoft')
except Exception:
os.system(r'regsvr32 /s %s\dm.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 import Operation
from win32gui import FindWindow
from dmMain import regsvr def close_txt_1(operation_1):
# 随便点击两次观察光标
operation_1.leftclick(100, 10, 5, 5)
operation_1.leftclick(100, 180, 5, 5) def close_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)

这段代码中有两个函数,

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

第二个则是使用键盘的简捷键关闭记事本的函数(处于被注释状态)。如果取消注释,运行后记事本关闭则键盘事件响应了。

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

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

为什么要这么做?
如果要用dm做出一个成型的脚本,如果都放在一个py文件里会显得很乱。 注意:
1.上面的代码中封装的函数很简单只供示范和测试,不同人可以根据需要自己封装比较复杂的函数
2.代码中使用的是前台鼠标模式,如果有需要可以在绑定窗口时改成后台鼠标模式(不过好像记事本并不支持后台鼠标模式,本人也没有测试完全,有待考证)
3.在鼠键事件响应后尽量加上一个休息时间(sleep),否则执行太快容易造成相应失灵的后果 如有问题请联系我qq:1009981067
 
 
 
 

python调用大漠插件教程04鼠键事件及基本项目思维的更多相关文章

  1. python调用大漠插件教程02大漠插件绑定测试工具

    什么是大漠插件绑定测试工具? 这是大漠插件为了方便使用者调试绑定窗口的模式而设计的,因为有些程序不会接受一般的鼠键事件的响应模式,每个程序所需要的响应模式都不尽相同,所以这个工具可以使我们在绑定窗口时 ...

  2. python调用大漠插件教程03窗口绑定实例

    怎样利用注册好的大漠对象来绑定窗口? 直接上代码,根据代码分析 from win32com.client import Dispatch import os from win32gui import ...

  3. python调用大漠插件教程01注册大漠

    使用大漠有两种方法,一种是直接调用特殊的dll实现不注册就能使(本人不会),另一种则是注册后使用. 如何用python注册大漠? from win32com.client import Dispatc ...

  4. Python调用大漠插件

    Python版本要用32位的?我去官网下载,太慢了,就在腾讯软件里面下载了一个,结果实验成功 import win32com.client dm = win32com.client.Dispatch( ...

  5. python使用大漠插件进行脚本开发的尝试(一)

    关于游戏脚本是纯然的小白,记一下学习过程遇到的问题.是在win10系统下对PC端的游戏进行脚本编辑,不知道会不会半途放弃. 一.大漠插件 大漠插件在游戏脚本编辑过程中是比较常见的工具,按我理解大致做的 ...

  6. C#调用大漠插件,发送QQ和微信消息

    大漠插件就不过多介绍了,不知道的请查下百度.主要是讲解C#怎么调用大漠插件. 大漠插件提供了COM版本,C#直接点击引用,添加即可.然后注册下大漠插件到系统文件夹,注册代码如下: static str ...

  7. C#调用大漠插件的方法和实例

    大漠插件是一个很不错的东西,在按键精灵和易语言里面用得很多,可以后台找图找字,写游戏自动脚本用得特别多.前面写一个微信的自动脚本,查了一些资料,易语言不太熟悉,按键精灵功能上可能不好实现,就找了些资料 ...

  8. Delphi调用大漠插件示例

    Delphi XE2 版本调用大漠插件方法:打开Component->Import Component->默认Import a Type Library,点击Next->找到Dm.d ...

  9. C#调用大漠插件

    大漠插件是一个很不错的东西,在按键精灵和易语言里面用得很多,可以后台找图找字,写游戏自动脚本用得特别多.前面写一个微信的自动脚本,查了一些资料,易语言不太熟悉,按键精灵功能上可能不好实现,就找了些资料 ...

随机推荐

  1. 如何在C#/.NET Core中使用责任链模式

    原文:Chain Of Responsbility Pattern In C#/.NET Core 作者:Wade 译者:Lamond Lu 最近我有一个朋友在研究经典的"Gang Of F ...

  2. 现代企业要求上什么样的MES(四)

    一个制造企业要想盈利,在生产方面要做的无非是提高资源利用效率和缩短生产通过时间(生产周期),而实现这俩步骤需要生产状况的在线透明及避免薄弱环节的分析数据,由此达到改善生产状态的目的.在erp系统中,通 ...

  3. JS实现显示来访者的停留时间

    显示来访者的停留时间 <script language="javascript"> var ap_name = navigator.appName; var ap_vi ...

  4. 【杂谈】Disruptor——RingBuffer问题整理(一)

    纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性. 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获 ...

  5. 【Hadoop离线基础总结】oozie调度hive

    目录 1.拷贝hive的案例模板 2.编辑hive模板 3.上传工作文件到hdfs 4.执行oozie的调度 5.查看调度结果 1.拷贝hive的案例模板 cd /export/servers/ooz ...

  6. STM32 CubeIDE无法进行调试的问题

    解决了由于一个很容易忽视的细节最终导致系统配置存在错误造成STM32 CubeIDE无法进行调试的问题: 文章目录 来龙去脉 解决方案 反思 来龙去脉 在享受CubeIDE快速和便捷的服务之后,生成了 ...

  7. 设计模式之GOF23备忘录模式

    备忘录模式Memento 场景: -Word文档编辑时,电脑死机或者断电,再次打开时,word提醒恢复之前的文档 -文件的撤回 核心: -就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原 ...

  8. [hdu4300] next数组的应用

    题意:给你一个密文和明文的对应表以及一个密文+明文的字符串,明文可能只出现前面的一部分(也就是说是原明文的前缀),求最短的明文. 思路:首先密文的长度至少占到一半,所以先把那一半解密,问题转化为找一个 ...

  9. JVM入门--类加载器

    一.基础架构 概览 我们平时说的栈是指的Java栈,native method stack 里面装的都是native方法 细节架构图 二.类加载器 1.类的加载 方法区并不是存放方法的区域,其是存放类 ...

  10. centOS 开启服务器后无法访问(大坑啊)

    在开启了nodejs后,发现虽然ssh访问到主机,但是公网不能访问. 一番调试发现程序是正常的,也确实在监听着端口.折腾良久无果,在Vultr上发帖求助.几分钟后Vultr团队的工程师Joshua B ...