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. E. Count The Blocks(找数学规律)

    \(\color{Red}{先说一下自己的歪解(找规律)}\) \(n=1是答案是10\) \(n=2时答案是180\) \(n=3时模拟一下,很容易发现答案是2610\ \ 180\ \ 10\) ...

  2. P2774 方格取数问题 网络流

    题目: P2774 方格取数问题 题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...

  3. salesforce零基础学习(九十七)Event / Task 针对WhoId的浅谈

    我们在Sales Cloud中经常会创建顾客,如果针对TO C业务,会启用个人顾客,比如针对车企行业,有一些场景是需要卖给个人的,而不只是企业采购.当通过打电话或者其他的场景有潜在客户并且转换成客户以 ...

  4. 在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)

    大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺.但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如 ...

  5. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...

  6. Linux内核驱动学习(八)GPIO驱动模拟输出PWM

    文章目录 前言 原理图 IO模拟输出PWM 设备树 驱动端 调试信息 实验结果 附录 前言 上一篇的学习中介绍了如何在用户空间直接操作GPIO,并写了一个脚本可以产生PWM.本篇的学习会将写一个驱动操 ...

  7. nginx源码安装方法

    nginx源码安装方法 安装方法如下 1.安装nginx必要的源码依赖软件包. yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zli ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来

    上一篇文章(https://www.cnblogs.com/meowv/p/12896177.html)已经成功创建了博客项目,但是abp默认给我们引用了许多项目中用不到的组件. 本篇文章将给项目进行 ...

  9. 【图论算法】LCA最近公共祖先问题

    LCA模板题https://www.luogu.com.cn/problem/P3379题意理解 对于有根树T的两个结点u.v,最近公共祖先LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深 ...

  10. appium——如何导出夜神模拟器下载“微信”app的apk

    背景:夜神模拟器是一款功能强大的安卓模拟器,但是当我们在上面下载APP应用后,通常不知道apk文件在哪里,下面以“微信”APP为例做一下详细介绍. 一般情况下,使用夜神安卓模拟器下载的文件只能在夜神安 ...