利用Python模拟鼠标自动完成MM32-LINK程序下载

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Python模拟鼠标自动完成MM32-LINK程序下载相关的知识,希望对你有一定的参考价值。

简 介: 编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作。

MM32-LINK在打开程序过程中,对话框的标题出现错误,“Load form file”,应该修改成“Load from file”。

关键词 MM32-LINKPython模拟鼠标自动程序下载

 

§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程序下载的主要内容,如果未能解决你的问题,请参考以下文章

设计MM32-LINK自动复位器,上电复位

python 自动化学习 pyautogui 模块

如何使用python来模拟鼠标点击(将通过实例自动化模拟在360浏览器中自动搜索"python")

利用Python模拟鼠标操作,一键将GIF文件载入CSDN的Markdown编辑器

制作灵动单片机MM32F3277 测试版

利用Python实现自动扫雷