LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件,如操控烧录软件等 除了模...

张开发
2026/4/9 12:56:11 15 分钟阅读

分享文章

LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件,如操控烧录软件等 除了模...
LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件如操控烧录软件等 除了模拟鼠标和键盘来实现之后还可以考虑另外一种方式使用窗口句柄来直接操作程序 如下面图片实例操作串口助手修改串口和波特率并写入数据和读取数据 这种方式可以避免电脑的分辨率变化和位置移动等问题LabVIEW玩第三方软件控制这事总让我想起小时候玩红白机时硬核破解游戏密码的感觉。传统用鼠标键盘模拟的法子就像拿手柄搓大招遇到4K屏缩放或者窗口位置漂移直接GG。最近发现用Windows窗口句柄直接操作控件简直就是开了作弊码。先上硬菜在LabVIEW里调Windows API才是王道。打开函数选板的「互连接口」-「库与可执行程序」-「调用库函数」把FindWindowA、FindWindowEx这些API直接拖进框图。就像快递单号对应包裹窗口句柄就是Windows给每个程序分配的身份证号码。比如搞串口助手的波特率下拉框// 获取主窗口句柄 hWnd FindWindowA(0, 串口助手V2.1); // 抓取下拉框控件 hComboBox FindWindowExA(hWnd, 0, ComboBox, 0);这代码比用鼠标坐标稳多了哪怕窗口缩在角落也能精准定位。实际跑起来要注意某些软件用自定义控件类名这时候就得祭出Spy这类工具扒代码。有次调某国产烧录软件发现类名居然是#32770差点以为键盘进水了。LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件如操控烧录软件等 除了模拟鼠标和键盘来实现之后还可以考虑另外一种方式使用窗口句柄来直接操作程序 如下面图片实例操作串口助手修改串口和波特率并写入数据和读取数据 这种方式可以避免电脑的分辨率变化和位置移动等问题改波特率这种下拉菜单光发消息还不够骚操作。得先用CBGETCOUNT拿到选项总数再用CBGETLBTEXT逐个读取文本。当年为了自动适配某奇葩设备的115200波特率代码写成这样// 选择波特率 SendMessageA(hComboBox, CB_SELECTSTRING, -1, 115200); // 触发确认动作 SendMessageA(hWnd, WM_COMMAND, MAKEWPARAM(3, CBN_SELCHANGE), hComboBox);文本框操作更带感直接往编辑框发WMSETTEXT消息比模拟键盘输入快三倍不止。不过有些软件像Keil这种老顽固必须配合SendMessageA发EMREPLACESEL才能生效。实测在i7-12700K上5000次数据写入能比模拟输入省下两包烟的时间。遇到控件嵌套套娃的情况也别慌递归调用FindWindowExA一层层扒。上次控制某三层嵌套的烧录软件界面代码写成俄罗斯套娃hFrame FindWindowExA(hWnd, 0, FrameWindow, 0); hPanel FindWindowExA(hFrame, 0, PanelClass, 0); hButton FindWindowExA(hPanel, 0, Button, 开始烧录);这套玩法最大的彩蛋是能绕过某些软件的操作限制。某次用PostMessageA偷偷给灰色不可用按钮发送BM_CLICK消息直接把厂商的试用版搞成全功能模式吓得赶紧删代码——这种骚操作建议搭配虚拟机食用。最后安利个调试技巧在LabVIEW里建个字符串显示控件实时显示返回的句柄值。配合微软自家Process Explorer查看窗口树比看星象图找控件靠谱多了。记住用句柄操作就像外科手术精准但容易见血做好异常处理才是老司机。

更多文章