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

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

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

#mermaid-svg-vfRdk4uOAU3GNW7m .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .label text{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .node rect,#mermaid-svg-vfRdk4uOAU3GNW7m .node circle,#mermaid-svg-vfRdk4uOAU3GNW7m .node ellipse,#mermaid-svg-vfRdk4uOAU3GNW7m .node polygon,#mermaid-svg-vfRdk4uOAU3GNW7m .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vfRdk4uOAU3GNW7m .node .label{text-align:center;fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .node.clickable{cursor:pointer}#mermaid-svg-vfRdk4uOAU3GNW7m .arrowheadPath{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-vfRdk4uOAU3GNW7m .flowchart-link{stroke:#333;fill:none}#mermaid-svg-vfRdk4uOAU3GNW7m .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-vfRdk4uOAU3GNW7m .edgeLabel rect{opacity:0.9}#mermaid-svg-vfRdk4uOAU3GNW7m .edgeLabel span{color:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-vfRdk4uOAU3GNW7m .cluster text{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-vfRdk4uOAU3GNW7m .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vfRdk4uOAU3GNW7m text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-vfRdk4uOAU3GNW7m .actor-line{stroke:grey}#mermaid-svg-vfRdk4uOAU3GNW7m .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-vfRdk4uOAU3GNW7m #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .sequenceNumber{fill:#fff}#mermaid-svg-vfRdk4uOAU3GNW7m #sequencenumber{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m #crosshead path{fill:#333;stroke:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .messageText{fill:#333;stroke:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vfRdk4uOAU3GNW7m .labelText,#mermaid-svg-vfRdk4uOAU3GNW7m .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-vfRdk4uOAU3GNW7m .loopText,#mermaid-svg-vfRdk4uOAU3GNW7m .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-vfRdk4uOAU3GNW7m .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-vfRdk4uOAU3GNW7m .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vfRdk4uOAU3GNW7m .noteText,#mermaid-svg-vfRdk4uOAU3GNW7m .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-vfRdk4uOAU3GNW7m .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-vfRdk4uOAU3GNW7m .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-vfRdk4uOAU3GNW7m .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-vfRdk4uOAU3GNW7m .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .section{stroke:none;opacity:0.2}#mermaid-svg-vfRdk4uOAU3GNW7m .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-vfRdk4uOAU3GNW7m .section2{fill:#fff400}#mermaid-svg-vfRdk4uOAU3GNW7m .section1,#mermaid-svg-vfRdk4uOAU3GNW7m .section3{fill:#fff;opacity:0.2}#mermaid-svg-vfRdk4uOAU3GNW7m .sectionTitle0{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .sectionTitle1{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .sectionTitle2{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .sectionTitle3{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-vfRdk4uOAU3GNW7m .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .grid path{stroke-width:0}#mermaid-svg-vfRdk4uOAU3GNW7m .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-vfRdk4uOAU3GNW7m .task{stroke-width:2}#mermaid-svg-vfRdk4uOAU3GNW7m .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .taskText:not([font-size]){font-size:11px}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-vfRdk4uOAU3GNW7m .task.clickable{cursor:pointer}#mermaid-svg-vfRdk4uOAU3GNW7m .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vfRdk4uOAU3GNW7m .taskText0,#mermaid-svg-vfRdk4uOAU3GNW7m .taskText1,#mermaid-svg-vfRdk4uOAU3GNW7m .taskText2,#mermaid-svg-vfRdk4uOAU3GNW7m .taskText3{fill:#fff}#mermaid-svg-vfRdk4uOAU3GNW7m .task0,#mermaid-svg-vfRdk4uOAU3GNW7m .task1,#mermaid-svg-vfRdk4uOAU3GNW7m .task2,#mermaid-svg-vfRdk4uOAU3GNW7m .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutside0,#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutside2{fill:#000}#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutside1,#mermaid-svg-vfRdk4uOAU3GNW7m .taskTextOutside3{fill:#000}#mermaid-svg-vfRdk4uOAU3GNW7m .active0,#mermaid-svg-vfRdk4uOAU3GNW7m .active1,#mermaid-svg-vfRdk4uOAU3GNW7m .active2,#mermaid-svg-vfRdk4uOAU3GNW7m .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-vfRdk4uOAU3GNW7m .activeText0,#mermaid-svg-vfRdk4uOAU3GNW7m .activeText1,#mermaid-svg-vfRdk4uOAU3GNW7m .activeText2,#mermaid-svg-vfRdk4uOAU3GNW7m .activeText3{fill:#000 !important}#mermaid-svg-vfRdk4uOAU3GNW7m .done0,#mermaid-svg-vfRdk4uOAU3GNW7m .done1,#mermaid-svg-vfRdk4uOAU3GNW7m .done2,#mermaid-svg-vfRdk4uOAU3GNW7m .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-vfRdk4uOAU3GNW7m .doneText0,#mermaid-svg-vfRdk4uOAU3GNW7m .doneText1,#mermaid-svg-vfRdk4uOAU3GNW7m .doneText2,#mermaid-svg-vfRdk4uOAU3GNW7m .doneText3{fill:#000 !important}#mermaid-svg-vfRdk4uOAU3GNW7m .crit0,#mermaid-svg-vfRdk4uOAU3GNW7m .crit1,#mermaid-svg-vfRdk4uOAU3GNW7m .crit2,#mermaid-svg-vfRdk4uOAU3GNW7m .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-vfRdk4uOAU3GNW7m .activeCrit0,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCrit1,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCrit2,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-vfRdk4uOAU3GNW7m .doneCrit0,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCrit1,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCrit2,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-vfRdk4uOAU3GNW7m .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-vfRdk4uOAU3GNW7m .milestoneText{font-style:italic}#mermaid-svg-vfRdk4uOAU3GNW7m .doneCritText0,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCritText1,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCritText2,#mermaid-svg-vfRdk4uOAU3GNW7m .doneCritText3{fill:#000 !important}#mermaid-svg-vfRdk4uOAU3GNW7m .activeCritText0,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCritText1,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCritText2,#mermaid-svg-vfRdk4uOAU3GNW7m .activeCritText3{fill:#000 !important}#mermaid-svg-vfRdk4uOAU3GNW7m .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-vfRdk4uOAU3GNW7m g.classGroup text .title{font-weight:bolder}#mermaid-svg-vfRdk4uOAU3GNW7m g.clickable{cursor:pointer}#mermaid-svg-vfRdk4uOAU3GNW7m g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vfRdk4uOAU3GNW7m g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-vfRdk4uOAU3GNW7m .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-vfRdk4uOAU3GNW7m .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vfRdk4uOAU3GNW7m .dashed-line{stroke-dasharray:3}#mermaid-svg-vfRdk4uOAU3GNW7m #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m .commit-id,#mermaid-svg-vfRdk4uOAU3GNW7m .commit-msg,#mermaid-svg-vfRdk4uOAU3GNW7m .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-vfRdk4uOAU3GNW7m g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-vfRdk4uOAU3GNW7m g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vfRdk4uOAU3GNW7m g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vfRdk4uOAU3GNW7m .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vfRdk4uOAU3GNW7m .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-vfRdk4uOAU3GNW7m .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-vfRdk4uOAU3GNW7m .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vfRdk4uOAU3GNW7m .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-vfRdk4uOAU3GNW7m .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-vfRdk4uOAU3GNW7m .edgeLabel text{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vfRdk4uOAU3GNW7m .node circle.state-start{fill:black;stroke:black}#mermaid-svg-vfRdk4uOAU3GNW7m .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-vfRdk4uOAU3GNW7m #statediagram-barbEnd{fill:#9370db}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-state .divider{stroke:#9370db}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-vfRdk4uOAU3GNW7m .note-edge{stroke-dasharray:5}#mermaid-svg-vfRdk4uOAU3GNW7m .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-vfRdk4uOAU3GNW7m .error-icon{fill:#522}#mermaid-svg-vfRdk4uOAU3GNW7m .error-text{fill:#522;stroke:#522}#mermaid-svg-vfRdk4uOAU3GNW7m .edge-thickness-normal{stroke-width:2px}#mermaid-svg-vfRdk4uOAU3GNW7m .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-vfRdk4uOAU3GNW7m .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-vfRdk4uOAU3GNW7m .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-vfRdk4uOAU3GNW7m .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-vfRdk4uOAU3GNW7m .marker{fill:#333}#mermaid-svg-vfRdk4uOAU3GNW7m .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-vfRdk4uOAU3GNW7m {color: rgba(0, 0, 0, 0.75);font: ;}

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 pyautoguiMM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175rect = tspgetwindowrect(MM32_TITLE)click_x = rect[0] + offset_x
click_y = rect[1] + offset_ypyautogui.click(click_x, click_y)for _ in range(20):time.sleep(.1)rect = tspgetwindowrect('Load form file')if sum(rect) != 0:breakprintf(rect)

  ■ 错误:MM32-LINK软件在打开的对话框标题出现错误:Load form file

  应该修改为: “Load from file

二、载入程序

  然后在使用Python模拟快捷键,加成对于程序的整个自动下载流程控制。

▲ 图1.2.1 完整的程序导入与下载过程

from head import *
import pyautoguiMM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175filename = 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_yLOAD_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:breakif 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: breakif 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 = 503click_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: breakif 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
#============================================================

■ 相关文献链接:

  • 制作灵动单片机MM32F3277 测试版
  • Simulate a mouse click python

● 相关图表链接:

  • 图1.1 MM32-LINK界面
  • 图1.1.1 点击“打开程序”,弹出文件打开对话框
  • 图1.2.1 完整的程序导入与下载过程

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

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

    简 介: 讨论了在csdn的Markdown编译器中自动载入GIF文件的方法.使用了Python中的pyautogui软件包,可以通过Python的小程序实现一键将GIF文件载入CSDN的Markdo ...

  2. python 鼠标 自动点击_利用python模拟鼠标点击自动完成工作,提升你的工作效率!...

    没有什么能比学以致用让学习变得更有动力的了. 不知道大家在工作中有没有一些工作需要重复的点击鼠标,因为会影响到财务统计报表的关系,我们每个月底月初都要修改ERP中的单据日期,单据多的时候光修改就能让你 ...

  3. Python 8行代码模拟鼠标自动删除微信收藏

    上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...

  4. python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...

  5. Delphi下利用WinIo模拟鼠标键盘详解

    本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现Se ...

  6. python京东自动签到_利用python Selenium实现自动登陆京东签到领金币功能

    如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个.密码的形 ...

  7. python模拟鼠标键盘点击,简单自动化动物餐厅

    Python模拟鼠标键盘点击自动化 首先在玩动物餐厅的时候发现他需要连续点击才能完成任务,而这有是一项枯燥而复杂的任务,所以我就想到用python的鼠标模拟来自动完成 Python中模拟键盘和鼠标最著 ...

  8. 利用phantomjs模拟QQ自动登录

    之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写. 考 ...

  9. python实现app自动签到器_利用Python实现App自动签到领取积分

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...

最新文章

  1. mysql 异步api_Hiredis异步API
  2. mybatis相关知识
  3. upload-labs-master文件上传靶场第七关详解
  4. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris
  5. 化学方程式作评、数学上成知识百科……那些“别人家的老师”有何特别?
  6. 【JavaScript】编写一个炫彩的网页时钟
  7. 前端技术学习之选择器(十三)
  8. 打开旧Flutter项目说:Your Flutter application is created using an older version of the Android embedding
  9. 非计算机专业毕业论文用游戏,浅谈非计算机专业计算机教学的论文
  10. hbase shell基础和常用命令详解
  11. Python+QT+Selenium制作在线视频播放器
  12. 系统cpu主频查看设置
  13. 36个助你成为专家需要掌握的JavaScript概念
  14. 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽
  15. ios播放本地声音文件
  16. JAVA编写学校超市选址问题_中小型超市商品管理系统设计与实现【开题报告+文献综述+毕业论文】.docx...
  17. 洛谷 P1618 STL全排列方法
  18. seo优化:把百度放进数据库
  19. 4-Arm PEG2000-EP,环氧基修饰的多臂PEG,4-Arm PEG2000-Epoxide
  20. 实践数据湖iceberg 第二十四课 iceberg元数据详细解析

热门文章

  1. phpmyadmin 忘记密码重设password
  2. 技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...
  3. 微信小程序 = 滚动页面
  4. PXE批量部署linux操作系统
  5. Linux发行分支时间轴
  6. ExtJS 表单 submit时错误处理
  7. 解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
  8. [你必须知道的.NET]第二十一回:认识全面的null
  9. 关于Pulsar与Kafka
  10. 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t