工具:
语言:Python 3.7
编辑工具:PyCharm
第三方依赖包:
PyHook
PyWin32
PyUserInput
pyperclip
一、安装工具
1、python3.7的PyMouse和PyKeyboard模块都集成到了PyUserInput模块中。
2、PyUserInput模块安装前需要安装PyWin32和PyHook模块。
下载地址:PyHook和PyWin32下载
安装命令:
在该文件对应的文件夹下右击打开命令窗口
输入:pip install pyHook‑1.5.1‑cp35‑cp35m‑win_amd64.whl
下载地址:PyUserInput下载
安装命令:
在该文件对应的文件夹下右击打开命令窗口
python setup.py install
3、安装pyperclip (离线下载时,可能需要其他依赖,可以根据提示单独下载依赖)
下载地址:pyperclip下载
二、自动化
需求:自动化控制数据模拟器,自动发送底层原始帧,数据类型包括设备信息、能源数据、状态数据和控制数据
# -*-coding:utf-8-*-
import os
import time
import win32gui
import win32api
import win32con
import pyperclip
from pykeyboard import PyKeyboard
from ctypes import *
def mouseClick():
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
#不能输入中文字符,中文字符需要使用pyperclip复制粘贴
def inputData(data):
k.type_string(data)
#封装鼠标定位函数
def moveMouseToPos(right, top):
windll.user32.SetCurserPos(loginid[0] + right, loginid[1] + top)
#方法一,全部用键盘
def moveDataType(type):
if type == 'energy'
k.tap_key(k.up_key)
def moveDataType(type):
if type == 'state'
k.tap_key(k.down_key)def moveDataType(type):
if type == 'control'
k.tap_key(k.down_key)#方法二,全部用鼠标
def moveMouseToDataType(right, top):
windll.user32.SetCursorPos(loginid[0] + right, loginid[1] + top)
if __name__ == "__main__":
#打开多少个模拟器
for i in range(0, 1):
#打开GDC
os.system(r"F:\GDC.exe")
time.sleep(0.2)
#获取窗口句柄 #参数1是类名,参数2是软件的标题
GDCMonique = win32gui.FindWindow(None,"GDC")
#获得Add GDC位置,即当前窗口左上角和右下角坐标; (right, top, left, bottom)
loginid = win32gui.GetWindowRect(GDCMonique)
print (loginid)
#模拟多少个请求
for i in range(0, 10):
#鼠标定位到Add GDC图标框
moveMouseToPos(80, 50)
#点击 Add GDC
mouseClick()
#定义键盘
k = PyKeyboard()
#输入IP
inputData("172.17.160.42")
#点击Tab 键,切换到端口号
k.tap_key(k.tab_key)
time.sleep(0.1)
#输入端口号
inputData("9017")
#按 Tab 键,到网关号
k.tap_key(k.tab_key, n=2)
#输入网关号
inputData("00 00 00 00 00 00 00 00 00 00 00 00 00 00 00")
# 按Tab 键,切换到 connect
#k.tap_key(k.tap_key, n=2)
#定位到connect
moveMouseToPos(885, 110)
#点击connect
mouseClick()
#tab键 切换到设备信息
k.tap_key(k.tab_key)
#输入 协议号
inputData("1803")
#Tab 切换
k.tap_key(k.tab_key)
#输入地址码
inputData("06")
#定位到 Send DevInfo
moveMouseToPos(885, 180)
#点击Send DevInfo 发送设备信息
mouseClick()
#energy, state, control数据测试
k.tap_key(k.tab_key)
#方法一,全键盘控制
#跳转到DataType选择,上下键选择
#moveDataType("state")
#方法二,全鼠标控制
#定位到DataType选择框,默认选中 energy
moveMouseToPos(490, 242)
#点击
mouseClick()
#通过定位选择数据类型,选择 state
#moveMouseToPos(490, 270)
#mouseClick()
#选择 control
moveMouseToPos(490, 282)
mouseClick()
k.tap_key(k.tab_key)
inputData("00 00 00 01 01 02 03 00 00 00 F0 00 00 00 00")
#方法一,全部按键控制
k.tap_key(k.tab_key)
k.tap_key(k.enter_key)
#方法二,全部鼠标控制
#moveMouseToPos(885,235)
#mouseClick()
#或者直接选中自动发送,不用点击Send按钮了
#跳转到自动发送选择框
#k.tap_key(k.tab_key, n=2)
#点击选择框,选中
#mouseClick()
#k.type_string()不能发送中文字符,故使用pyperclip复制粘贴中文字符
pyperclip.copy('中文')
time.sleep(1)
k.press_key(k.control_key)
k.tap_key('v')
k.release_key(k.control_key)
#关闭当前窗口
win32gui.PostMessage( win32gui.FindWindow(None,"GDC") ,win32con.WM_CLOSE,0,0)
参考资料:
https://blog.csdn.net/weixin_34416754/article/details/93618058
https://blog.csdn.net/sessos/article/details/88599210
http://timgolden.me.uk/pywin32-docs/win32api.html
https://www.cnblogs.com/lqn404/p/11194692.html
https://blog.csdn.net/lilongsy/article/details/81607793
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
https://www.cnblogs.com/wuxunyan/p/9366178.html