利用Python模拟鼠标自动完成MM32-LINK程序下载
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Python模拟鼠标自动完成MM32-LINK程序下载相关的知识,希望对你有一定的参考价值。
简 介: 编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作。
MM32-LINK在打开程序过程中,对话框的标题出现错误,“Load form file”,应该修改成“Load from file”。
关键词
: MM32-LINK,Python,模拟鼠标,自动程序下载
§01 MM32-LINK
在 制作灵动单片机MM32F3277 测试版 描述了通过MM32-LINK完成对于灵动MCU开发过程。特别是设计了基于MM32-LINK的5PIN程序下载接口。但是,如果在整个开发过程,需要MM32-LINK自动完成程序下载,需要通过MM32-LINK界面上的载入程序,并进行编程过程。使用鼠标需要经过多个操作。
下面将会通过Python程序,模拟鼠标与键盘操作,完成一键下载程序的过程。
▲ 图1.1 MM32-LINK界面
通过截取MM32-LINK对话框,利用线段绘制出从左上角到打开程序位置的线段,通过显示线段属性(宽,长)从而获得鼠标点击打开程序按钮相对位置。(803,175)
一、模拟鼠标操作
1、Python软件包
根据 Simulate a mouse click python 中的介绍,可以使用pyautogui程序包完成对鼠标模拟操作。
2、测试点击程序
▲ 图1.1.1 点击“打开程序”,弹出文件打开对话框
from head import *
import pyautogui
MM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175
rect = tspgetwindowrect(MM32_TITLE)
click_x = rect[0] + offset_x
click_y = rect[1] + offset_y
pyautogui.click(click_x, click_y)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect('Load form file')
if sum(rect) != 0:
break
printf(rect)
■ 错误:MM32-LINK软件在打开的对话框标题出现错误:Load form file
应该修改为: “Load from file
”
二、载入程序
然后在使用Python模拟快捷键,加成对于程序的整个自动下载流程控制。
▲ 图1.2.1 完整的程序导入与下载过程
from head import *
import pyautogui
MM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175
filename = r'D:\\zhuoqing\\window\\ARM\\IAR\\MM32\\Test\\TestF103UART2.hex'
if not os.path.isfile(filename):
printf("ERROR:Can not find file :%s\\a"%filename)
exit()
rect = tspgetwindowrect(MM32_TITLE)
click_x = rect[0] + offset_x
click_y = rect[1] + offset_y
LOAD_FILE = 'Load form file'
pyautogui.click(click_x, click_y)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect(LOAD_FILE)
if sum(rect) != 0:
break
if sum(rect) == 0:
printf("No load file dialog open !\\a")
exit()
clipboard.copy(filename)
tspsendwindowkey(LOAD_FILE, "n", alt=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "v", control=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "o", alt=1, noreturn=1)
time.sleep(.5)
tspsendwindowkey(MM32_TITLE, "p", alt=1, noreturn=1)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect('Program')
if sum(rect) != 0: break
if sum(rect) == 0:
printf("ERROR:No program dialog open.\\a")
exit()
tspsendwindowkey('Program', '\\r', noreturn=1)
printf("\\a")
time.sleep(2.0)
tspsendwindowkey('Program', 'c', alt=1, noreturn=1)
printf("\\a")
※ 实验总结 ※
编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作。
MM32-LINK在打开程序过程中,对话框的标题出现错误,“Load form file”,应该修改成“Load from file”。
下面给出完成的程序。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MM32PRG.PY -- by Dr. ZhuoQing 2021-11-03
#
# Note:
#============================================================
from head import *
import pyautogui
#------------------------------------------------------------
MM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175
#------------------------------------------------------------
filename = r'D:\\zhuoqing\\window\\ARM\\IAR\\MM32\\Test\\SeekFreeMP.Hex'
if len(sys.argv) > 1:
filename = sys.argv[1]
printf(filename)
#------------------------------------------------------------
if not os.path.isfile(filename):
printf("ERROR:Can not find file :%s\\a"%filename)
exit()
#------------------------------------------------------------
windowrect = tspgetwindowrect(MM32_TITLE)
click_x = windowrect[0] + offset_x
click_y = windowrect[1] + offset_y
#------------------------------------------------------------
LOAD_FILE = 'Load form file'
pyautogui.click(click_x, click_y)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect(LOAD_FILE)
if sum(rect) != 0:
break
#------------------------------------------------------------
if sum(rect) == 0:
printf("No load file dialog open !\\a")
exit()
#------------------------------------------------------------
clipboard.copy(filename)
tspsendwindowkey(LOAD_FILE, "n", alt=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "v", control=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "o", alt=1, noreturn=1)
time.sleep(.5)
#------------------------------------------------------------
tspsendwindowkey(MM32_TITLE, "c", alt=1, noreturn=1)
time.sleep(1)
wm_offsetx = 430
wm_offsety = 503
click_x = windowrect[0] + wm_offsetx
click_y = windowrect[1] + wm_offsety
pyautogui.click(click_x, click_y)
#------------------------------------------------------------
'''
tspsendwindowkey(MM32_TITLE, "p", alt=1, noreturn=1)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect('Program')
if sum(rect) != 0: break
if sum(rect) == 0:
printf("ERROR:No program dialog open.\\a")
exit()
tspsendwindowkey('Program', '\\r', noreturn=1)
printf("\\a")
time.sleep(2.0)
tspsendwindowkey('Program', 'c', alt=1, noreturn=1)
'''
#------------------------------------------------------------
printf("\\a")
#------------------------------------------------------------
# END OF FILE : MM32PRG.PY
#============================================================
■ 相关文献链接:
● 相关图表链接:
以上是关于利用Python模拟鼠标自动完成MM32-LINK程序下载的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python来模拟鼠标点击(将通过实例自动化模拟在360浏览器中自动搜索"python")